シェルスクリプトには、データベースがオフラインのときに早く終了するための次のコードがあります。
Br3trans -u / -c -f dbstate && ( echo Datenbank ist online. ; echo Nächster Schritt... ) || ( echo "Datenbank ist offline" ; exit 1 );
echo Test
データベースがオフラインの場合、スクリプトを終了するのではなく「test」と表示されます。
どんなアイデアがありますか?
答え1
このexit
ステートメントはサブシェルを終了します。
1行のテキストを展開すると、期待どおりに機能し始めます。
#!/bin/bash
if Br3trans -u / -c -f dbstate
then
echo "Datenbank ist online."
echo "Nächster Schritt..."
else
echo "Datenbank ist offline"
exit 1
fi
echo Test
{...}
あるいは、一部のシェルではsubshellの代わりにグループ化を使用できますが、読みやすくする(...)
ために私が提供した少し長いバージョンを使用する方が良いと思います。
答え2
あなたの問題は、クローズグループにコマンドがあり、exit
クローズ( ... )
グループのすべてのコマンドを実行することです。サブシェルこのコマンドグループ用に特別に作成されました。したがって、あなたのexit
ステートメントは、スクリプトを実行するデフォルトのシェルではなくサブシェルにのみ適用されます。
この場合、「1行」アプローチではなくコマンドを明示的にテストすることをお勧めします。
#!/bin/bash
if Br3trans -u / -c -f dbstate
then
echo "Datenbank ist online"
echo "Nächster Schritt ..."
else
echo "Datenbank ist offline"
exit 1
fi
echo "Test"
必要に応じて1行で書くことができます。
if Br3trans -u / -c -f dbstate; then echo "Datenbank ist online"; echo "Nächster Schritt"; else echo "Datenbank ist offline"; exit 1; fi
echo "Test"