次の条件のif | elseステートメントを作成するのは難しいことがわかりました。私がやっていることは、次のクエリを実行するOracleデータベースがあり、行の出力を返すことです(レコードを表示したりNULL値を返すことができます)。私が望むのは、行が返される場合です。出力として複数のコマンドを実行する必要があり、返された行がない場合は、2番目のコマンドセットを実行する必要があります。
例 1 - 出力を示します。
SQL> select value from v$parameter where name='spfile';
VALUE
---------------
+DATA_01/TESTDB/spfileTESTDB.ora
例2 - 場合によっては行を返すことができません。
SQL> select value from v$parameter where name='spfile';
VALUE
--------------
答え1
次のようにしたい場合があります。
db_connect="user/pass@db"
output=$(
sqlplus -s "$db_connect" <<'END' | sed '/^$/d'
set heading off
select value from v$parameter where name='spfile';
END
)
この-s
オプションとset heading off
sqlplus コマンドは、不要な出力を最小限に抑えるように設計されています。sed '/^$/d'
空行を削除することです。結果は$output
空の文字列(空の結果の場合)または照会出力行でなければなりません。
heredocターミネータには行にEND
他の文字があってはいけません。そのため、他の行のようにインデントされません。
これにより、次のことができます。
if [[ -n "$output" ]]; then
stuff if there is output
else
stuff if there is null output
fi