人気ブログランキング | 話題のタグを見る
(Linux)コマンドを連結して行う「;」「&」「&&」「||」の違い
シェルスクリプトにおいて、複数のコマンドを連結して処理するときに、「;」「&」「&&」「||」が使えるですんが、それぞれがどのような動きするかまとめてみました。

;(セミコロン)
前のコマンドが終わり次第、次のコマンドが実行される。(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が失敗したら指定したディレクトリ削除
command1 || rm -rf /home/hoge/tmp


参考:
最低限 UNIX / Linux [III] 【シェルスクリプト】
UNIXの部屋 コマンド検索:シェル記号類まとめ (*BSD/Linux)
PC UNIXの起動と起動ファイルの解読@謎の処理系 SunOS 4.1.4 with Linux/FreeBSD

by Jehoshaphat | 2011-10-05 00:23 | Linux


<< LANの中にルータを多段で置く... (Linux)パスを含む変数を... >>