- PR -

シェルのif文

1
投稿者投稿内容
しん
常連さん
会議室デビュー日: 2004/04/04
投稿数: 48
投稿日時: 2006-12-14 01:08
シェルスクリプトにて下記サンプルを作成してif文のテストをしたところ
おかしな判定をしたので質問させてください。
上から2行目の@select.sqlの実行結果である変数TABLE_NAMEをechoにて
プロンプト上に表示させると「A」なのにif文の中を通りません。
if文の直前に TABLE_NAME = "A" という一文を入れて初めてif文の中を
通るようになります。何がおかしいのでしょうか?また、対応策はある
のでしょうか?

<select.sh>
#!/bin/bash
TABLE_NAME=`sqlplus -s ejf001/xxejf001 @select.sql`

if [ $TABLE_NAME = "A" ]
then
echo "if文の中"
fi

<select.sql>
set echo off
set heading off
set feedback off
set pages 0
select 'A' from dual;
exit

[ メッセージ編集済み 編集者: かんたろう 編集日時 2006-12-14 01:20 ]
非武装エリア
大ベテラン
会議室デビュー日: 2004/03/03
投稿数: 202
お住まい・勤務地: 日本・たこ部屋
投稿日時: 2006-12-14 06:48
sqlplus -s ejf001/xxejf001 @select.sql | od -c

の結果を確認してみては?
しん
常連さん
会議室デビュー日: 2004/04/04
投稿数: 48
投稿日時: 2006-12-14 08:46
お返事ありがとうございます。
sqlplus -s ejf001/xxejf001 @select.sql | od -c
の結果は
0000000 A \r \n
0000011

echo "A" | od -c
の結果は
0000000 A \r \n
0000011
でした。SQLの実行結果には「\r」が入っているようです。
これはどのような対策を取ればよいでしょうか?
非武装エリア
大ベテラン
会議室デビュー日: 2004/03/03
投稿数: 202
お住まい・勤務地: 日本・たこ部屋
投稿日時: 2006-12-14 09:12
テータがテキスト文字だけしかありあえないという条件ならsedとかを使ってsqlplusの結果からCR(\r)文字をフィルタすれば良いと思います。
または条件式として"A\r"としても良いかも知れません。

多分、入力の段階で使っているコンソールがUnix系では無くMS系であったため、[Enter]キーの取り扱いの違いから余計な制御文字(CR)を入れてしまっているのでは無いかと推測できますが、まずはそこの設計から直す方が良いかも知れません。
しん
常連さん
会議室デビュー日: 2004/04/04
投稿数: 48
投稿日時: 2006-12-15 01:50
ご返答ありがとうございます。
sedコマンドにて\rを空文字に置き換えたらうまく判定されるように
なりました。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)