シェルスクリプトでコマンド実行の成否で分岐させる(ワンライナー)

結論

次のような感じになるのではないでしょうか。下記の行の内容は「$ uname -a を行い、その結果の文字列の中に arm という文字が含まれている場合は false を返す」という内容になります。

 if [ "$(uname -a | grep arm)" ]; then false; fi

詳細

最初の if文 の中身に実行するコマンドを書きます。コマンドをくくる書き方としては backtick*1 で書くのがよく用いられると(個人的には)思っていたのですが、最近は backtick で書かないで $() で書くっぽいです。backtick で書いたら ShellCheck にて怒られました。

次の then にて true or false を返します。true の場合は終了ステータスコード 0 が返り、false の場合は終了ステータスコード 1 が返ります。

直前のコマンドを実行した結果のステータスコードの戻り値は $? に収められていますので、$ echo $? を実行すればその値を確認することができます。

補足

CircleCI では終了ステータスコードに 1 が返った時点で*2エラーになります。それを回避するために、「返るステータスコードを逆転させたい場合」に使えるかなと思っています*3

シェルスクリプトを書く機会がグッと減っているため、久しぶりに書くと試行錯誤を続けて多大な時間を費やして書くことになって大変です。

*1:「バッククォート」とも言われている記号のことです

*2:正確には、「0以外」が返った時点で

*3:特殊な場合になるとは思いますが

Powered by はてなブログ