以下のスクリプトにいくつかの問題があります。コマンドが正常に完了したらメッセージをエクスポートしたいが、同時に成功しない場合は続行する必要があります。
私たちはOracleサーバーを持っており、以下のデータベースは3ノードracサーバーです。アーカイブしたいのは、ノード1(例:TEST11)でインスタンスを終了したときに正常に完了したコマンドの出力を表示しないことです。それ以外の場合はエラーが発生するため、そのエラーをファイルに記録し、成功したかどうかを確認したいと思います。
for DBI in TEST11 TEST21 TEST31 TEST41
do
DB=$(echo -n $DBI | head -c -1)
echo $DB
export ORACLE_SID=$DBI
export ORACLE_HOME=`grep "^${DBI}:" /etc/oratab | cut -d: -f2 -s`
$ORACLE_HOME/bin/srvctl stop instance -d $DB -i $DBI
done
モハマドDBAに感謝します。
ベストアンサー1
Bashでは、$?
前のコマンドの戻りコードを取得します。前のコマンドが成功した場合、戻りコードは0になり、それ以外の場合は0ではありません。
次の例では、成功条件と失敗条件を含む文字列をファイルから取得します。スクリプトでこのロジックを使用できます。
私のスクリプトtest.shの内容
grep "grapes" file1 > /dev/null
if [ $? -eq 0 ]
then
echo "Success. Perform success action"
else
echo "Failure.. Do Failure action"
fi
以下はサンプル実行です。
#cat file1
apple
grapes
#sh test.sh
Success. Perform success action
#cat file1
apple
#sh test1
Failure.. Do Failure action