概要
Bashで条件文を書く時に以下のように括弧を使うけど、きちんと仕組みを整理しておく。
if [ -f ${FILENAME} ]; then
...
fi
testコマンド
括弧は実はtestコマンドの省略形。以下の記述と上記は同じもの。
testコマンドは条件が真なら0、偽なら1を返すのでコマンドの戻り値をifで判定している。
if test -f ${FILENAME}; then
...
fi
ファイル系
式 | 説明 |
---|---|
-e ファイル名 | ファイルが存在するか |
-f ファイル名 | ファイルが通常のファイルか |
-d ファイル名 | ファイルがディレクトリか |
-s ファイル名 | ファイルサイズがゼロでないか |
-x ファイル名 | ファイルが実行可能か |
条件系
式 | 説明 |
---|---|
文字列1 = 文字列2 | 文字列1と文字列2が等しい場合 |
文字列1 != 文字列2 | 文字列1と文字列2が等しくない場合 |
-z 文字列1 | 文字列1のサイズがゼロの場合 |
-n 文字列1 | 文字列1のサイズがゼロでない場合。-nを省略しても同じ。 |
数値1 -eq 数値2 | 数値1と数値2が等しい場合 |
数値1 -ne 数値2 | 数値1と数値2が等しくない場合 |
数値1 -gt 数値2 | 数値1と数値2より大きい場合 |
数値1 -ge 数値2 | 数値1と数値2以上の場合 |
数値1 -lt 数値2 | 数値1と数値2未満の場合 |
数値1 -le 数値2 | 数値1と数値2以下の場合 |
条件式系
式 | 説明 |
---|---|
条件式1 -a 条件式2 | 条件式1と条件式2のAND条件 |
条件式1 -o 条件式2 | 条件式1と条件式2のOR条件 |
if [ $A -eq 1 -a $B -eq 0 ]; then
...
fi
これと以下は同値。以下はそれぞれのtestコマンドを&&でつないで判定させている。
if [ $A -eq 1 ] && [ $B -eq 0 ]; then
...
fi
Bash拡張2重括弧
Bash拡張で2重括弧をつかうと、条件のグループ化や&&などを使うようにできる。
式 | 説明 |
---|---|
(条件式) | 条件式のグループ化 |
条件式1 && 条件式2 | 条件式1と条件式2のAND条件。-aは使えない。 |
条件式1 | |
!条件式1 | 条件式1の否定条件。 |
文字列1 == 文字列2 | 文字列1と文字列2が等しい場合 |
文字列1 = 文字列2 | ==と同じ |
文字列1 != 文字列2 | 文字列1と文字列2が等しくない場合 |
文字列1 =~ 文字列パターン | 拡張正規表現によるマッチ |
Bash拡張の2重括弧を使うと以下のようにもかける
if [[ ( $A -eq 1 ) && ( $B -eq 0 ) ]]; then
...
fi
コマンドの存在チェックによる条件判定
testコマンドを使う場合は以下のような感じで判定できます。
which bash > /dev/null 2>&1
RES=$?
if [ $? -eq 0 ]; then
echo "bash found"
else
echo "bash not found"
fi
testコマンドを使わず直接witchコマンドの結果を見て判定することもできます。
if which bash > /dev/null 2>&1; then
echo "bash found"
else
echo "bash not found"
fi