どのプログラミング言語においても条件式で条件分岐したり、繰り返し処理したりすると思います。
シェルスクリプトにも同様な機能がありますが、少し、他のプログラミング言語とは異なります。
本記事では、シェルスクリプトの条件式の評価について紹介します。
数値の比較
数値の比較では、他のプログラミング言語は、等号、不等号(<,>,<=,>=,==)を用います。
しかし、シェルスクリプトでは、異なります。
実際は、できる方法もありますが、またそれは別記事で紹介します。
条件式 | 実行結果 |
数値1 -eq 数値2 | 数値1と数値2が等しければ真 |
数値1 -ge 数値2 | 数値1が数値2より大きい、もしくは等しければ真 |
数値1 -gt 数値2 | 数値1が数値2より大きければ真 |
数値1 -le 数値2 | 数値1が数値2より小さい、もしくは等しければ真 |
数値1 -lt 数値2 | 数値1が数値2未満であれば真 |
数値1 -ne 数値2 | 数値1と数値2が等しくなければ真 |
文字列の比較
文字列の比較では、他のプログラミング言語は、等しい場合は==で、等しくない場合は!=が多いと思います。
シェルスクリプトでは、以下のようになります。
条件式 | 実行結果 |
-n 文字列 | 文字列の長さが0より大きければ真 |
-z 文字列 | 文字列の長さが0であれば真 |
文字列1 = 文字列2 | 2つの文字列が等しければ真 |
文字列1 !=文字列2 | 2つの文字列が等しくなければ真 |
論理結合
他のプログラミング言語では、論理積は&&,論理和は||が多いと思います。
シェルスクリプトでは、以下のようになります。
条件式 | 実行結果 |
! 条件 | 条件式が偽であれば真 |
条件1 -a 条件2 | 条件1と条件2の両方が真であれば真(AND) |
条件1 -o 条件2 | 条件1か条件2のいずれかが真であれば真(OR) |
他にもシェルスクリプトでは、他の言語にはあまり見られない、或いはコード量が増えてしまうことも簡単にできる方法があります。
ファイルの形式
条件式 | 実行結果 |
-f ファイル | ファイルがあれば真 |
-d ディレクトリ | ディレクトリがあれば真 |
-r ファイル | ファイルが存在、かつ読み込み可能であれば真 |
-w ファイル | ファイルが存在、かつ書き込み可能であれば真 |
-x ファイル | ファイルが存在、かつ実行可能であれば真 |
-s ファイル | サイズ0より大きいファイルがあれば真 |
-L ファイル | シンボリックリンクであるファイルがあれば真 |
ファイルの特性
条件式 | 実行結果 |
-e ファイル | ファイルがあれば真 |
ファイル1 -nt ファイル2 | ファイル1がファイル2より修正時刻が新しければ真 |
ファイル1 -ot ファイル2 | ファイル1がファイル2より修正時刻が古ければ真 |
まとめ
シェルスクリプトでは、他のプログラミング言語とは異なる条件式を用います。
実は、ある方法では他のプログラミング言語と同じように条件式を用いることができます。