シェルスクリプトやコマンドラインを扱う際に、コマンドの実行を制御する演算子として「;
」、「&
」、「&&
」、「||
」がよく使われます。それぞれの違いと使い方をわかりやすく解説します。
1. セミコロン(;
)
特徴
- コマンドを順番に実行します。
- 各コマンドは独立して実行され、前のコマンドの成功・失敗に関係なく次のコマンドが実行されます。
例
command1; command2; command3
この場合、command1
が終了した後にcommand2
、その後にcommand3
が実行されます。
使用例
echo "Hello"; echo "World"
出力:
Hello World
2. アンパサンド(&
)
特徴
- コマンドをバックグラウンドで実行します。
- コマンドの終了を待たずに、次のコマンドが即座に実行されます。
例
command1 & command2 &
この場合、command1
とcommand2
が並列で実行されます。
使用例
sleep 10 & echo "Done"
出力:
Done
(sleep 10
はバックグラウンドで実行され、すぐにecho "Done"
が実行されます。)
3. ダブルアンパサンド(&&
)
特徴
- 前のコマンドが成功(終了ステータス0)した場合のみ、次のコマンドを実行します。
例
command1 && command2
この場合、command1
が成功した場合にのみcommand2
が実行されます。
使用例
mkdir new_directory && cd new_directory
mkdir
が成功してディレクトリが作成された場合にのみ、cd
コマンドが実行されます。
4. ダブルパイプ(||
)
特徴
- 前のコマンドが失敗(終了ステータスが0以外)した場合に、次のコマンドを実行します。
例
command1 || command2
この場合、command1
が失敗した場合にのみcommand2
が実行されます。
使用例
mkdir existing_directory || echo "Failed to create directory"
既に存在するディレクトリを作成しようとして失敗した場合にのみ、「Failed to create directory」が出力されます。
各演算子の違いを比較
演算子 | 動作の概要 | 使用例 |
---|---|---|
; | コマンドを順番に実行 | command1; command2 |
& | コマンドをバックグラウンドで実行 | command1 & command2 & |
&& | 前のコマンドが成功した場合に次を実行 | command1 && command2 |
|| | 前のコマンドが失敗した場合に次を実行 | command1 || command2 |
応用例
1. 複数の演算子を組み合わせる
command1 && command2 || command3
command1
が成功した場合、command2
が実行され、command3
はスキップされます。command1
が失敗した場合、command3
が実行されます。
2. ログファイルへの出力を組み合わせる
command1 && echo "Success" > log.txt || echo "Failure" > log.txt
command1
が成功した場合は「Success」がログに記録され、失敗した場合は「Failure」が記録されます。
3. 並列処理の完了を待つ
バックグラウンドで実行した複数のコマンドの完了を待つには、wait
を使用します。
command1 & command2 & command3 & wait
まとめ
;
: コマンドを順番に実行。&
: コマンドを並列(バックグラウンド)実行。&&
: 前のコマンドが成功した場合に次を実行。||
: 前のコマンドが失敗した場合に次を実行。