文字列比較はsqlplus出力で動作しません。

文字列比較はsqlplus出力で動作しません。

パスワード:

iIMSI=`sqlplus -s ${APP_ORA_USER}/${APP_ORA_PASS}@${APP_DB_INST} << EOF
SET HEAD OFF PAGESIZE 0 LINESIZE 1000 TRIMOUT ON TIMING OFF
select resource_value from agd1_resources where resource_type='3'
and subscriber_id in (select subscriber_id from agd1_resources where resource_value='$sSUBSCRIBER');
exit;
EOF`

if [ "$iIMSI" = "no rows selected" ]; then
echo hello
else echo elseblock
fi

質問:

私が指定した値がsSUBSCRIBERテーブルに存在しないため、クエリ結果は「選択された行がありません」で、iIMSIに保存します。

なぜ私のものですか?if条件動作しませんか(常にelseブロックを実行しています)?

答え1

変数に期待値があるかどうかを確認するには、echo "$iIMSI"ifステートメントの上の行に変数を挿入します。

私は次のスクリプトを試しました

$ cat test.sh
#!/bin/bash

iIMSI="no rows selected"
if [ "$iIMSI" = "no rows selected" ]; then
echo hello
else echo elseblock
fi

期待どおりに動作します。

$ ./test.sh 
hello

関連情報