Shell における角括弧(単角括弧と二重角括弧を含む)は、いくつかの条件のテストに使用できます:
- 算術比較、例えば変数が0であるかどうか、
[ $var -eq 0 ]。 - ファイル属性のテスト、例えばファイルが存在するかどうか、
[ -e $var ]、ディレクトリかどうか、[ -d $var ]。 - 文字列比較、例えば2つの文字列が同じかどうか、
[[ $var1 = $var2 ]]。
[] はしばしば test コマンドで代用できます。後述します。
算术比较
変数または値に対して算術条件判断を行う:
[ $var -eq 0 ] # 当 $var 等于 0 时,返回真 [ $var -ne 0 ] # 当 $var 不等于 0 时,返回真
注意すべき点として、[ と ] とオペランドの間には必ずスペースが必要です。そうでないとエラーになります。例えば以下のようにするとエラーになります:
[$var -eq 0 ] 或 [ $var -ne 0]
その他の比較演算子:
| 操作符 | 意义 |
|---|---|
| -gt | 大于 |
| -lt | 小于 |
| -ge | 大于或等于 |
| -le | 小于或等于 |
-a (and) または -o (or) を使用して複数の条件を組み合わせてテストできます:
[ $var1 -ne 0 -a $var2 -gt 2 ] # 使用逻辑与 -a [ $var1 -ne 0 -o $var2 -gt 2 ] # 使用逻辑或 -o
ファイルシステム属性テスト
異なる条件フラグを使用して、異なるファイルシステム属性をテストします。
| 操作符 | 意义 |
|---|---|
[ -f $file_var ] |
変数 $file_var が正常なファイルパスまたはファイル名(file)である場合、真を返します |
[ -x $var ] |
変数 $var が含むファイルが実行可能(execute)である場合、真を返します |
[ -d $var ] |
変数 $var が含むファイルがディレクトリ (directory) であれば真を返す |
[ -e $var ] |
変数 $var が含むファイルが存在する(exist)場合、真を返します |
[ -c $var ] |
変数 $var が含むファイルがキャラクタデバイスファイルのパス(character)である場合、真を返します |
[ -b $var ] |
変数 $var が含むファイルがブロックデバイスファイルのパス(block)である場合、真を返します |
[ -w $var ] |
変数 $var が含むファイルが書き込み可能(write)である場合、真を返します |
[ -r $var ] |
変数 $var が含むファイルが読み取り可能(read)である場合、真を返します |
[ -L $var ] |
変数 $var が含むものがシンボリックリンク(link)である場合、真を返します |
使用方法は以下の通り:
fpath="/etc/passwd" if [ -e $fpath ]; then echo File exits; else echo Does not exit; fi
字符串比较
文字列比較を行う際は、二重角括弧 [[ ]] を使用するのが最善です。単角括弧はエラーを引き起こす可能性があるため、避けるのが賢明です。
2つの文字列が同じかどうかを確認する:
[[ $str1 = $str2 ]]
str1 が str2 と等しい場合、真を返します。つまり、str1 と str2 に含まれるテキストは同じです。単一の等号は二重等号に置き換えることもできます。つまり、上記の文字列比較は [[ $str1 == $str2 ]] と同等です。
= の前後にはスペースがあることに注意してください。スペースを忘れると、比較ではなく代入文になってしまいます。
文字列のその他の比較ケース:
| 操作符 | 意义 |
|---|---|
[[ $str1 != $str2 ]] |
str1 と str2 が異なる場合、真を返します |
[[ -z $str1 ]] |
str1 が空文字列である場合、真を返します |
[[ -n $str1 ]] |
str1 が非空文字列である場合、真を返します |
論理演算子 && と || を使用すると、複数の条件を簡単に組み合わせられます。例えば:
str1="Not empty" str2="" if [[ -n $str1 ]] && [[ -z $str2 ]]; then echo str1 is nonempty and str2 is empty string. fi
test コマンドでも条件判定を実行できます。test を使用すると括弧を多用せずに済みます。[] 内のテスト条件は test でも実行できます。
if [ $var -eq 0 ]; then echo "True"; fi
等价于:
if test $var -eq 0; then echo "True"; fi
作者:liuchengxu_
原文:https://blog.csdn.net/simple_the_best/article/details/75915767