2019/03/21 指摘対応
これでいいみたいです
# !/usr/bin/env sh
if ! { command1 || command2; }; then
# commandのExitCode != 0の場合の処理
fi
安直に書くとこうなる
if command1 || command2; then
:
else
# commandのExitCode != 0の場合の処理
fi
※以下は古い内容
結論
# !/usr/bin/env sh
if command;then :;else
# commandのExitCode != 0の場合の処理
fi
# !/usr/bin/env sh
if command;then :;else
# commandのExitCode != 0の場合の処理
fi
経緯
- Shellのif文は終了コードによって分岐する
# !/usr/bin/env sh
if command;then
# commandのExitCode == 0の場合の処理
else
# commandのExitCode != 0の場合の処理
fi
- testコマンド(
[])を使用しない場合、if文のみで否定演算はできない(と思う) - このため、
終了コード != 0の場合のみ処理をしたい場合は冗長な書き方になる
# !/usr/bin/env sh
if command;then
: # 「:」は何もしないコマンド
else
# commandのExitCode != 0の場合の処理
fi
- 短く書きたい場合は以下のようにできそう
-
thenの後ろにホワイトスペースが必要なことに注意
# !/usr/bin/env sh
if command;then :;else
# commandのExitCode != 0の場合の処理
fi
- 具体的には、OR条件で必要なコマンドが全て存在しない場合の条件分岐をしたかった
# !/usr/bin/env sh
if type curl &>/dev/null || type wget &>/dev/null;then :;else
echo "required: curl or wget"
exit 1
fi