条件文の種類
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