私はこのようなことをしたい:
if cmd1 && cmd2
echo success
else
echo epic fail
fi
どうすればいいですか?
答え1
これはあなたの要件を満たす必要があります。
cmd1 && cmd2 && echo success || echo epic fail
または
if cmd1 && cmd2; then
echo success
else
echo epic fail
fi
答え2
質問の疑似コードが質問のタイトルと一致しません。
コマンド1が失敗した場合にコマンド2を実行する方法を実際に知る必要がある人がいる場合は、次の簡単な説明に従ってください。
cmd1 || cmd2
:このコマンドは実行されcmd1
、失敗した場合でも実行されます。cmd2
cmd1 && cmd2
:実行されますcmd1
。成功すると実行されます。cmd2
cmd1 ; cmd2
:実行に失敗したか成功したかにかかわらず実行され、次にcmd1
実行されます。cmd2
cmd1
完全性のために、あなたの例ではthen
キーワードを見逃しました。表示したいコードは次のように書かれています。
if cmd1 && cmd2; then echo success; else echo epic fail; fi
これは次のとおりです。
((cmd1 && cmd2) && echo success) || echo epic fail
括弧はオプションなので左の関連性。
このコードはcmd2
正常に実行された場合にのみ実行されcmd1
、そうでなければ失敗は直接エコーされます。
答え3
Petr Uzelの言葉は正しいです。しかし、$?という魔法を使うこともできます。
$?最後に実行されたコマンドの終了コードを保存します。これにより、スクリプトを非常に柔軟にすることができます。
この質問はこのトピックと多少関連しています。$?使用のベストプラクティス バッシュから?。
cmd1
if [ "$?" -eq "0" ]
then
echo "ok"
else
echo "Fail"
fi
その後、必要に応じてさまざまな終了コードに応答してさまざまな操作を実行できます。