PROGRAM SHELL

初心者のためのbash超入門【第5回 条件文】

 

 

条件文の種類

if文やwhile文で使う条件文は、主に以下の種類があります。

  • 数値の比較
  • 文字列の比較
  • ファイルの属性
  • testコマンド

 

数値の比較

数値の比較は(( ))で条件を囲みます。
シェル変数は$(ダラー)記号が不要です
以下は良く使う数値比較の条件文です。

シェル変数が値と等しい (( シェル変数 == ))
シェル変数が値より小さい (( シェル変数 < ))
シェル変数が値以下 (( シェル変数 <= ))
シェル変数が値より大きい (( シェル変数 > ))
シェル変数が値以上 (( シェル変数 >= ))
シェル変数が値以外 (( シェル変数 != ))

 

文字列の比較

文字列の比較は[[ ]]で条件を囲みます。
文字列の比較は文字コードを見て、大小を判断します。
シェル変数は$(ダラー)記号が必要です
以下は良く使う文字列比較の条件文です。

シェル変数が値と等しい [[ "$シェル変数" == ]]
シェル変数が値より小さい [[ "$シェル変数" <  ]]
シェル変数が値より大きい [[ "$シェル変数" >  ]]
シェル変数が値以外 [[ "$シェル変数" != ]]
シェル変数の値がNULL以外(長さが0より大きい) [[ -n "$シェル変数" ]]
シェル変数の値がNULL(長さが0) [[ -z "$シェル変数" ]]

注意ポイント

文字列の比較では「より大きい」「より小さい」の評価はできません。
また、数値の比較を行うと、想定とは違う動作をする場合があります。(例:2 < 11はになります)

 

ファイルの属性

ファイルの属性は[[ ]]で条件を囲みます。(後述する[ ]も使えます)
シェル変数は$(ダラー)記号が必要です
以下は良く使うファイル属性の条件文です。

ファイルが存在する [[ -a "$シェル変数" ]]
ディレクトリーが存在する [[ -d "$シェル変数" ]]
ファイルに読み込み権限がある [[ -r "$シェル変数" ]]
ファイルに書き込み権限がある [[ -w "$シェル変数" ]]
ファイルに実行権限がある [[ -x "$シェル変数" ]]
ファイルが存在して空ではない [[ -s "$シェル変数" ]]

 

testコマンド

Bシェル(Bourne Shell)のような古いシェルは数値の比較に(( ))は使えないため、testコマンドまたは[(角括弧)コマンドを使います。
一般的にtestコマンドではなく、[(角括弧)コマンドを使用します。
シェル変数は$(ダラー)記号が必要です
bashの場合は(( ))を使った方が分かりやすいため、Bシェルとの互換性を考慮しないのであれば、(( ))を使うことをお勧めします。

参考

[(角括弧)もコマンドです。

 

[(角括弧)コマンドを使った条件文

シェル変数が値と等しい [ "$シェル変数" -eq ]
シェル変数が値より小さい [ "$シェル変数" -lt  ]
シェル変数が値以下 [ "$シェル変数" -le ]
シェル変数が値より大きい [ "$シェル変数" -gt ]
シェル変数が値以上 [ "$シェル変数" -ge ]
シェル変数が値以外 [ "$シェル変数" -ne ]

 

testコマンドを使った条件文

シェル変数が値と等しい test "$シェル変数" -eq
シェル変数が値より小さい test "$シェル変数" -lt
シェル変数が値以下 test "$シェル変数" -le
シェル変数が値より大きい test "$シェル変数" -gt
シェル変数が値以上 test "$シェル変数" -ge
シェル変数が値以外 test "$シェル変数" -ne

メモ

testコマンドの演算子は、以下の略語になっています。

■ -eq ⇒ equal
■ -lt ⇒ less than
■ -le ⇒ less than or equal
■ -gt ⇒ greater than
■ -ge ⇒ greater than or equal
■ -ne ⇒ not equal

 

 

-PROGRAM, SHELL