シェルオペレーター


シェルは、他のプログラミング言語と同様に、次のようなさまざまな演算子をサポートしています。

  • ネイティブ 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 であると仮定して、一般的に使用される関係演算子のリストです。 オペレーター

説明

-eq 2 つの数値が等しいかどうかを確認し、等しい場合は true を返します。 [ $a -eq $b ] は false を返します。 -ね 2 つの数値が等しいかどうかを確認し、等しくない場合は true を返します。 [ $a -ne $b ] は true を返します。 -gt 左側の数値が右側の数値より大きいかどうかを確認し、大きい場合は true を返します。 [ $a -gt $b ] は false を返します。 -lt 左側の数値が右側の数値より小さいかどうかを確認し、小さい場合は true を返します。 [ $a -lt $b ] は true を返します。 -げ 左側の数値が右側の数値より大きいかどうかを確認し、大きい場合は true を返します。 [ $a -ge $b ] は false を返します。 -ル 左側の数値が右側の数値以下であるかどうかを確認し、そうであれば true を返します。 [ $a -le $b ] は true を返します。
#!/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

スクリプトを実行すると、出力結果は次のようになります:

文件可读
文件可写
文件可执行
文件为普通文件
文件不是个目录
文件不为空
文件存在