[bash] || 、 &&、 true を組み合わせて処理を実行

最近、以下のようなbashスクリプトを見かけました。

[処理1] || true && [処理2] || true && [処理3]


bashにおける'||'、'true'、'&&'の役割は以下の通り。

||: OR演算子。 a || b 「a または bが真ならば真」。bashにおいては「aが失敗した場合bを実行する」という意味合いで使われることが多い。

&&: AND演算子。前の処理が成功したら次の処理を実行する。

true: 真を返す。trueコマンドを実行すると必ず終了ステータスが0となる。(つまり処理が正常に終了したとみなされる)

以上を踏まえた上で、もう一度上記のスクリプトを見てみると、

1. 処理1を実行する。成功すれば良し、失敗してもOR演算によってtrueコマンドが実行されるので、どのみち処理1は成功したと判断される。
2. 処理1は成功したと判断されたので、AND演算によって処理2が実行される。
3. 処理2が成功すれば良し、失敗してもOR演算によってtrueコマンドが実行されるので、どのみち処理2は成功したと判断される
4. 処理2は成功したと判断されたので、AND演算によって処理3が実行される。

以下のようなスクリプトを書いて検証してみました。

#!/bin/bash

## The script to understand how '||', '&&' and 'true' works

cat /tmp/hoge.txt 2>/dev/null || true && echo 'hogeeee' >> /tmp/hoge.txt || true && echo 'foooooo'

上記のスクリプトの働きは以下の通り。

1. /tmp/hoge.txtというファイルを開く。ファイルが存在しなくてもOR演算によってtrueコマンドが実行され、処理は成功したと判断されるので、AND演算によって次の処理に進む。
2. 'hogeeee'という文字列を/tmp/hoge.txtに書き込む。書き込みが失敗してもOR演算によってtrueコマンドが実行され、処理は成功したと判断されるので、AND演算によって次の処理に進む。
3. 'foooooo'という文字列を標準出力に出力する。

スクリプト実行前は/tmp/hoge.txtは存在しません。
and01.png

スクリプトを実行します。
and02.png

スクリプト実行後、/tmp/hoge.txtが作成されました。
and03.png

2回目の実行。
and04.png

3回目の実行。
and05.png

どういうときに使えるか
複数の処理が存在するときに、途中の処理の成功・失敗に関わらず、一番最後まで処理を進めたいときに有用。

以上

Leave a Reply

Your email address will not be published. Required fields are marked *


The reCAPTCHA verification period has expired. Please reload the page.