シェルオペレーター
シェルは、他のプログラミング言語と同様に、次のようなさまざまな演算子をサポートしています。
ネイティブ bash は単純な数学演算をサポートしていませんが、awk や expr などの他のコマンドを通じて実現できます。expr が最も一般的に使用されます。
expr は式計算ツールです。式の評価操作を完了するために使用します。 たとえば、2 つの数字を追加します (
一重引用符 ' の代わりにバックティック ` が使用されていることに注意してください): #!/bin/bash val=`expr 2 + 2` echo "两数之和为 : $val"
インスタンスを実行する»
スクリプトを実行すると、出力結果は次のようになります:两数之和为 : 4
2 つのポイント注意:
たとえば、式と演算子の間にはスペースが必要です。2+2 は誤りであり、私たちがよく知っているほとんどのプログラミング言語とは異なります。
完全な式は「 」で囲む必要があります。この文字は、Esc キーの下にある一般的に使用される一重引用符ではないことに注意してください。
算術演算子
次の表は、変数 a が 10、変数 b が 20 であると仮定して、一般的に使用される算術演算子のリストです。 オペレーター 説明 例- + 追加
- `expr $a + $b` の結果は 30 になります。
引き算
`expr $a - $b` の結果は 10 になります。
* 掛け算 `expr $a * $b` の結果は 200 になります。 / 部門 `expr $b / $a` の結果は 2 になります。 % 残りを受け取ります `expr $b % $a` の結果は 0 になります。 = 課題 a=$b は変数 b の値を a に代入します。 == 等しい。 2 つの数値を比較し、同じ場合に true を返すために使用されます。 [ $a == $b ] は false を返します。 != 平等ではありません。 2 つの数値を比較し、それらが同じでない場合に true を返すために使用されます。 [ $a != $b ] は true を返します。注: 条件式は角括弧の間に配置する必要があり、スペースが必要です。例: [$a==$b]は誤りであり、[ $a == $b ]として記述する必要があります。 。
インスタンス
算術演算子の例は次のとおりです:
#!/bin/bash # author:php中文网 # url:www.php.cn a=10 b=20 val=`expr $a + $b` echo "a + b : $val" val=`expr $a - $b` echo "a - b : $val" val=`expr $a \* $b` echo "a * b : $val" val=`expr $b / $a` echo "b / a : $val" val=`expr $b % $a` echo "b % a : $val" if [ $a == $b ] then echo "a 等于 b" fi if [ $a != $b ] then echo "a 不等于 b" fi
スクリプトを実行すると、出力結果は次のようになります:
a + b : 30 a - b : -10 a * b : 200 b / a : 2 b % a : 0 a 不等于 b
関係演算子は、文字列の値が数値でない限り、数値のみをサポートし、文字列はサポートしません。注:
乗算を実行するには、乗算記号 (*) の前にバックスラッシュ () を付ける必要があります。 if...then...fi は条件文ですが、これについては後で説明します。
- 関係演算子
次の表は、変数 a が 10、変数 b が 20 であると仮定して、一般的に使用される関係演算子のリストです。 オペレーター
説明
例
#!/bin/bash # author:php中文网 # url:www.php.cn a=10 b=20 if [ $a -eq $b ] then echo "$a -eq $b : a 等于 b" else echo "$a -eq $b: a 不等于 b" fi if [ $a -ne $b ] then echo "$a -ne $b: a 不等于 b" else echo "$a -ne $b : a 等于 b" fi if [ $a -gt $b ] then echo "$a -gt $b: a 大于 b" else echo "$a -gt $b: a 不大于 b" fi if [ $a -lt $b ] then echo "$a -lt $b: a 小于 b" else echo "$a -lt $b: a 不小于 b" fi if [ $a -ge $b ] then echo "$a -ge $b: a 大于或等于 b" else echo "$a -ge $b: a 小于 b" fi if [ $a -le $b ] then echo "$a -le $b: a 小于或等于 b" else echo "$a -le $b: a 大于 b" fi
10 -eq 20: a 不等于 b 10 -ne 20: a 不等于 b 10 -gt 20: a 不大于 b 10 -lt 20: a 小于 b 10 -ge 20: a 小于 b 10 -le 20: a 小于或等于 bブール演算子
インスタンス | 関係演算子の例は次のとおりです: | スクリプトを実行すると、出力結果は次のとおりです: |
次の表は、一般的に使用されるブール演算子を示しています。変数 a は 10、変数 b は 20:
オペレーター説明
例
! 非操作。式が true の場合は false を返し、それ以外の場合は true を返します。 [ ! false ] true を返します。 -o または演算。1 つの式が true の場合に true を返します。 [ $a -lt 20 -o $b -gt 100 ] は true を返します。 -あ AND 演算は、両方の式が true の場合にのみ true を返します。 [ $a -lt 20 -a $b -gt 100 ] は false を返します。例
ブール演算子の例は次のとおりです:
#!/bin/bash # author:php中文网 # url:www.php.cn a=10 b=20 if [ $a != $b ] then echo "$a != $b : a 不等于 b" else echo "$a != $b: a 等于 b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a -lt 100 -a $b -gt 15 : 返回 true" else echo "$a -lt 100 -a $b -gt 15 : 返回 false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a -lt 100 -o $b -gt 100 : 返回 true" else echo "$a -lt 100 -o $b -gt 100 : 返回 false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a -lt 100 -o $b -gt 100 : 返回 true" else echo "$a -lt 100 -o $b -gt 100 : 返回 false" fi
スクリプトを実行すると、出力結果は次のようになります:
10 != 20 : a 不等于 b 10 -lt 100 -a 20 -gt 15 : 返回 true 10 -lt 100 -o 20 -gt 100 : 返回 true 10 -lt 100 -o 20 -gt 100 : 返回 false
論理演算子
以下では、変数 a が 10 であると仮定します。変数 b は 20:
オペレーター | 説明 | 例 |
---|---|---|
&& | 論理積 | [[ $a -lt 100 && $b -gt 100 ]] は false を返します |
|| | 論理和 | [[ $a -lt 100 || $b -gt 100 ]] true を返します |
インスタンス
論理演算子の例は次のとおりです:
#!/bin/bash # author:php中文网 # url:www.php.cn a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi
スクリプトを実行すると、出力結果は次のとおりです:
返回 false 返回 true
文字列演算子
次の表は、変数 a が "abc"、変数 b が "efg" であると仮定して、一般的に使用される文字列演算子をリストしています。 オペレーター
説明 例 = 2 つの文字列が等しいかどうかを確認し、等しい場合は true を返します。 [ $a = $b ] は false を返します。 != 2 つの文字列が等しいかどうかを確認し、等しくない場合は true を返します。 [ $a != $b ] は true を返します。 -z 文字列の長さが 0 かどうかを確認し、0 の場合は true を返します。 [ -z $a ] は false を返します。 -ん 文字列の長さが 0 かどうかを確認し、0 でない場合は true を返します。 [ -n $a ] は true を返します。 ストラ 文字列が空かどうかを確認し、空でない場合は true を返します。 [ $a ] は true を返します。例
文字列演算子の例は次のとおりです:
#!/bin/bash # author:php中文网 # url:www.php.cn a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a 等于 b" else echo "$a = $b: a 不等于 b" fi if [ $a != $b ] then echo "$a != $b : a 不等于 b" else echo "$a != $b: a 等于 b" fi if [ -z $a ] then echo "-z $a : 字符串长度为 0" else echo "-z $a : 字符串长度不为 0" fi if [ -n $a ] then echo "-n $a : 字符串长度不为 0" else echo "-n $a : 字符串长度为 0" fi if [ $a ] then echo "$a : 字符串不为空" else echo "$a : 字符串为空" fi
スクリプトを実行すると、出力結果は次のようになります:
abc = efg: a 不等于 b abc != efg : a 不等于 b -z abc : 字符串长度不为 0 -n abc : 字符串长度不为 0 abc : 字符串不为空
ファイルテスト演算子
ファイルテスト演算子は、Unixファイルのさまざまな属性を検出するために使用されます。
属性検出は次のように説明されます:
オペレーター | 説明 | 例 |
---|---|---|
-b ファイル | ファイルがブロック デバイス ファイルかどうかを確認し、ブロック デバイス ファイルである場合は true を返します。 | [ -b $file ] は false を返します。 |
-c ファイル | ファイルがキャラクタ デバイス ファイルかどうかを確認し、キャラクタ デバイス ファイルである場合は true を返します。 | [ -c $file ] は false を返します。 |
-d ファイル | ファイルがディレクトリであるかどうかを確認し、ディレクトリである場合は true を返します。 | [ -d $file ] は false を返します。 |
-f ファイル | ファイルが通常のファイル (ディレクトリでもデバイス ファイルでもない) かどうかを確認し、そうであれば true を返します。 | [ -f $file ] は true を返します。 |
-g ファイル | ファイルに SGID ビットが設定されているかどうかを確認し、設定されている場合は true を返します。 | [ -g $file ] は false を返します。 |
-kファイル | ファイルにスティッキー ビットが設定されているかどうかを確認し (Sticky Bit)、そうであれば true を返します。 | [ -k $file ] は false を返します。 |
-p ファイル | ファイルが名前付きパイプかどうかを確認し、そうであれば true を返します。 | [ -p $file ] は false を返します。 |
-u ファイル | ファイルに SUID ビットが設定されているかどうかを確認し、設定されている場合は true を返します。 | [ -u $file ] は false を返します。 |
-r ファイル | ファイルが読み取り可能かどうかを確認し、読み取り可能であれば true を返します。 | [ -r $file ] は true を返します。 |
-wファイル | ファイルが書き込み可能かどうかを確認し、書き込み可能であれば true を返します。 | [ -w $file ] は true を返します。 |
-x ファイル | ファイルが実行可能かどうかを確認し、実行可能であれば true を返します。 | [ -x $file ] は true を返します。 |
-s ファイル | ファイルが空かどうか(ファイルサイズが0より大きいかどうか)を確認し、空でない場合はtrueを返します。 | [ -s $file ] は true を返します。 |
-eファイル | ファイル (ディレクトリを含む) が存在するかどうかを確認し、存在する場合は true を返します。 | [ -e $file ] は true を返します。 |
インスタンス
変数ファイルは、サイズが 100 バイトで、rwx 権限を持つファイル「/var/www/php/test.sh」を表します。次のコードは、ファイルのさまざまな属性を検出します:#!/bin/bash # author:php中文网 # url:www.php.cn file="/var/www/php/test.sh" if [ -r $file ] then echo "文件可读" else echo "文件不可读" fi if [ -w $file ] then echo "文件可写" else echo "文件不可写" fi if [ -x $file ] then echo "文件可执行" else echo "文件不可执行" fi if [ -f $file ] then echo "文件为普通文件" else echo "文件为特殊文件" fi if [ -d $file ] then echo "文件是个目录" else echo "文件不是个目录" fi if [ -s $file ] then echo "文件不为空" else echo "文件为空" fi if [ -e $file ] then echo "文件存在" else echo "文件不存在" fi
スクリプトを実行すると、出力結果は次のようになります:
文件可读 文件可写 文件可执行 文件为普通文件 文件不是个目录 文件不为空 文件存在