条件分岐と比較演算子 - Linux シェルスクリプト プログラミング
PROGRAM
条件分岐と比較演算子
条件分岐
Linux シェルスクリプト (sh) では、if 文を利用して、条件に応じて処理を分岐することができます。
たとえば、変数 VALUE の値が、0 より大きいか 0 未満か、それ以外かを判定して、それに応じて処理を分岐する場合は、次のような感じになります。
if [ "$VALUE" -gt 0 ]
then
# ここに VALUE の値が 0 より大きかった場合の処理を記載します。
elif [ "$VALUE" -lt 0 ]
then
# ここに VALUE の値が 0 より小さい場合の処理を記載します。
else
# ここに VALUE の値が上記以外の場合の処理を記載します。
fi
変数 VALUE が 10 以上である場合に処理をしたい場合は、次のような感じです。
if [ "$VALUE" -ge 10 ]
then
# ここに VALUE の値が 10 以上だった場合の処理を記載します。
fi
ここで、上記の例では左辺を引用符で括っていますけど、これは VALUE 変数の値が空文字列だった場合に構文エラーとならないようにするためです。これがないと、処理の際に "if [ -ge 10 ]" と解釈されて、"-ge" の左側に何も指定されていないことを示す "[: -ge: unary operator expected" というエラーとなってしまいます。
比較演算子
条件分岐のプログラムで使用する if 文の [ ] の中身は、どのような場合に処理をするかを示す条件式で、数値での比較と文字列の比較とでは、指定の仕方が異なる感じです。
数値での比較の場合には、使用する比較演算子は次のようになります。
[ "$value1" -eq "$value2" ] | value1 と value2 とが一致すると "真" になります。 |
---|---|
[ "$value1" -ne "$value2" ] | value1 と value2 とが一致しないと "真" になります。 |
[ "$value1" -gt "$value2" ] | value1 が value2 よりも大きいと "真" になります。 |
[ "$value1" -ge "$value2" ] | value1 が value2 以上だと "真" になります。 |
[ "$value1" -lt "$value2" ] | value1 が value2 よりも小さいと "真" になります。 |
[ "$value1" -le "$value2" ] | value1 が value2 以下だと "真" になります。 |
指定した条件式が "真" となった場合に、それに該当するブロックの処理が実行されることになります。
文字列の比較の場合は、次のようになります。
[ "$value1" = "$value2" ] | value1 と value2 とが一致すると "真" になります。 |
---|---|
[ "$value1" != "$value2" ] | value1 と value2 とが一致しないと "真" になります。 |
[ "$value1" ] | value1 が空文字でなければ "真" になります。 |
[ ! "$value1" ] | value1 が空文字であれば "真" になります。 |
[ -n "$value1" ] | value1 の文字長が 0 より大きいと "真" になります。 |
[ -z "$value1" ] | value1 の文字長が 0 であれば "真" となります。 |
ファイルについての比較演算子も用意されています。
[ -d "$file1" ] | file1 がディレクトリの時に "真" になります。 |
---|---|
[ -f "$file1" ] | file1 が通常のファイルの時に "真" になります。 |
[ -r "$file1" ] | file1 が読み取り可能の時に "真" になります。 |
[ -w "$file1" ] | file1 が書き込み可能の時に "真" になります。 |
[ -x "$file1" ] | file1 が実行可能の時に "真" になります。 |
[ -L "$file1" ] | file1 がシンボリックリンクの時に "真" になります。 |
[ -s "$file1" ] | file1 のファイルサイズが 0 より大きい時に "真" になります。 |
[ "$file1" -nt "$file2" ] | file1 が file2 よりも新しい場合に "真" になります。(Newer Than) |
[ -f "$file1" -ot "$file2" ] | file1 が file2 よりも古い場合に "真" になります。(Older Than) |
また、これらの比較結果を組み合わせるための演算子も用意されています。
[ ! 条件式1 ] | 条件式1の真偽を逆転します。 |
---|---|
[ 条件式1 -a 条件式2 ] | 条件式2 と条件式2 の両方が真の場合に "真" となります。(And) |
[ 条件式1 -o 条件式2 ] | 条件式2 と条件式2 のどちらかが真の場合に "真" となります。(Or) |
これらの演算子を組み合わせて、条件式を組み上げて行く形になります。
[ もどる ]