- - PR -
シェルのif文
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 2006-12-14 06:48
sqlplus -s ejf001/xxejf001 @select.sql | od -c
の結果を確認してみては? |
|
投稿日時: 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」が入っているようです。 これはどのような対策を取ればよいでしょうか? |
|
投稿日時: 2006-12-14 09:12
テータがテキスト文字だけしかありあえないという条件ならsedとかを使ってsqlplusの結果からCR(\r)文字をフィルタすれば良いと思います。
または条件式として"A\r"としても良いかも知れません。 多分、入力の段階で使っているコンソールがUnix系では無くMS系であったため、[Enter]キーの取り扱いの違いから余計な制御文字(CR)を入れてしまっているのでは無いかと推測できますが、まずはそこの設計から直す方が良いかも知れません。 |
|
投稿日時: 2006-12-15 01:50
ご返答ありがとうございます。
sedコマンドにて\rを空文字に置き換えたらうまく判定されるように なりました。ありがとうございました。 |
1