どうも、江川(egawa)くんです。
Linuxでシェルスクリプトなどを書いていると以下のような条件に遭遇することがあるので、
備忘録的に残していきたいと、おっもいま〜す。
- 複数のコマンド実行を一行で記述したい
- あるコマンドが問題なく実行された場合のみ、次のコマンドを実行したい
- あるコマンドが失敗したら、次のコマンドを実行したい
更新情報
- 2016/7/8 新規作成
- 2016/7/8 レイアウトなど見やすく修正
- 2016/8/18 テキストを一部修正
種類
ここで出てくるのは以下のみです。
-
;
(セミコロン) -
&
(アンパサント) -
&&
(アンパサントアンパサント) -
|
(パイプ) -
||
(パイプパイプ)
使用例
コマンド1が終了したらコマンド2を実行する(実行結果に関わらず)
コマンド1が異常終了しても、コマンド2は実行されます
使い方
コマンド1 ; コマンド2
使用例1. 5分後にdate
コマンドを実行する(普段使わないので、いい例が思いつきませんww)
# sleep 5m ; date
### コマンド1を実行しつつコマンド2も実行する バックグラウンドでコマンド1を実行しつつ、コマンド2も実行できます 使い方
コマンド1 & コマンド2
使用例1. /home/egawa/egawa.sh
を実行しログを出力しつつ、vi
でegawa.txt
を編集する
# sh /home/egawa/egawa.sh >> /var/log/egawa.log & vi /home/egawa/egawa.txt
### コマンド1が正常終了したらコマンド2を実行する コマンド1が正常終了したときのみ、コマンド2が実行されます 使い方
コマンド1 && コマンド2
使用例1. /home/egawa
にディレクトリ移動ができたら、egawa.txt
を作成する
# cd /home/egawa/ && touch egawa.txt
使用例2. ダウンロードしてきたtar.gz
を解凍後、ディレクトリへ移動
# tar zxf xxx-2.x.tar.gz && cd xxx-2.x
使用例3. 何かのパッケージをソースからインストールする
# ./configure && make && make install
### コマンド1の結果をコマンド2に渡して実行 コマンド1の結果をコマンド2へ渡して結果を出力します 使い方
コマンド1 | コマンド2
使用例1. ps aux
で実行中のプロセスを出力し(ターミナルには出力されない)、その中からキーワードhttpd
にマッチする行を出力する
# ps aux | grep httpd
### コマンド1が異常終了したらコマンド2が実行される コマンド1が異常終了したときのみ、コマンド2が実行されます 使い方
コマンド1 || コマンド2
使用例1. /home/egawa/abc
にディレクトリ移動ができなかったら、/home/egawa/abc
ディレクトリを作成する
(使用例だと、ディレクトリがなかった場合エラーが出力されるが、その結果としてディレクトリが作成される)
# cd /home/egawa/abc || mkdir /home/egawa/abc