シェルスクリプトにおいて、複数のコマンドを連結して処理するときに、「;」「&」「&&」「||」が使えるですんが、それぞれがどのような動きするかまとめてみました。
;(セミコロン)
前のコマンドが終わり次第、次のコマンドが実行される。(3つ以上のコマンドを連結してOKみたい)
#command1 を実行し、実行後 command2 を実行する。
command1 ; command2
&(アンパサンド)
;(セミコロン)は前のコマンドの完了を待っていたが、&は待たない。
#command1 を実行しながら、command2 を実行する。
command1 & command2
&&
前のコマンドがうまく終了した(終了ステータスが0)なら、次のコマンドを実行。そうでないなら次のコマンドは実行しない。
#command1 が 0 を返した場合、command2 を実行
command1 && command2
例:
#configureが成功したらmake,makeが成功したらmake installする
configure && make && make install
#/home/a.txtがあれば cp コマンドでコピーする
[ -f /home/a.txt ] && cp /home/a.txt /var/bkup
↑のように、テストコマンドの戻り値も使うことができる。
こうすることで、if文の行数を減らせるかもしれない。
if文だと下記のようになる。
if [ -f /home/a.txt ] then
cp /home/a.txt /var/bkup
if
||
&&とは逆で前のコマンドに失敗(終了コード0以外)したら、次のコマンドを実行する。
#command1 が 0 以外を返した場合、command2 を実行
command1 || command2
例:
#command1が失敗したら指定したディレクトリ削除
参考:
最低限 UNIX / Linux [III] 【シェルスクリプト】
UNIXの部屋 コマンド検索:シェル記号類まとめ (*BSD/Linux)