Linuxコマンドを連続して使うには


どうも、江川(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を実行しログを出力しつつ、viegawa.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