Shell脚本中的基本运算符

Shell是一个接口,程序员可以使用该接口执行命令并直接与操作系统进行交互。Shell脚本正在提供Shell可以执行的命令。

在shell中,还有变量和用于操作这些变量的运算符。Shell脚本中有5个基本运算符。

  • 算术运算符

  • 关系运算符

  • 布尔运算符

  • 按位运算符

  • 文件测试运算符

算术运算符

Shell脚本中的算术运算符用于执行常规算术/数学运算。Shell脚本中有7个有效的算术运算符-

  • 加法(+)用于将两个操作数(变量)相加。

  • 减号(-)用于在Shell脚本中减去两个变量(操作数)。

  • 乘法(*)用于在Shell脚本中将两个变量(操作数)相乘。

  • 除法(/)用于在Shell脚本中划分两个变量(操作数)。

  • 模数(%)用于在Shell脚本中查找操作数除法的余数。

  • 增量运算符(++)用于将运算符的当前值加1。

  • 减法运算符(-)用于从运算符的当前值中减去1。

示例

为了展示算术运算符在shell脚本中的实现-

a = 32
b = 23
   add = $((a + b))
   echo sum of a and b is $add
   sub = $((a - b))
   echo Subtraction of a and b is $sub
   mul = $((a * b))
   echo product of a and b is $mul
   div = $((a / b))
   echo division of a and b is $div
mod = $((a % b))
   echo remainder when a is divided b is $mod
((++a))
   echo Increment operator when applied on "a" results into a = $a
((--b))
echo Decrement operator when applied on "b" results into b = $b

输出结果

sum of a and b is 55
Subtraction of a and b is 9
product of a and b is 736
division of a and b is 1
remainder when a is divided b is 9
Increment operator when applied on a results into a = 33
Decrement operator when applied on b results into b = 24

关系运算符

Shell脚本中的关系运算符定义了操作数之间的关系。这些的返回值是true或false,这取决于运算符和操作数。Shell脚本中有6种有效的关系运算符-

  • ==运算符是等于两个运算符值的运算符。如果值相等,则返回true,否则返回false。

  • !=运算符是等于两个运算符的值并检查其不等式的运算符。如果值不相等,则返回true,否则返回false。

  • <运算符是小于两个运算符的值进行比较的运算符。如果第一个操作数的值小于秒,则运算符返回true,否则返回false。

  • <=运算符小于或等于将两个运算符的值进行比较的运算符。如果第一个操作数的值小于或等于秒,则运算符返回true,否则返回false。

  • > operator是大于两个运算符的值进行比较的运算符。如果第一个操作数的值大于秒,则运算符返回true,否则返回false。

  • > =运算符大于或等于比较两个运算符的值的运算符。如果第一个操作数的值大于或等于秒,则运算符返回true,否则返回false。

示例

a = 32
b = 67
if(( $a==$b ))
then
   echo a is equal to b.
else
   echo a is not equal to b.
fi
if(( $a!=$b ))
then
   echo a is not equal to b.
else
   echo a is equal to b.
fi
if(( $a<$b ))
then
   echo a is less than b.
else
   echo a is not less than b.
fi

if(( $a<=$b ))
then
   echo a is less than or equal to b.
else
   echo a is not less than or equal to b.
fi
if(( $a>$b ))
then
   echo a is greater than b.
else
   echo a is not greater than b.
fi
if(( $a>=$b ))
then
   echo a is greater than or equal to b.
else
   echo a is not greater than or equal to b.
fi

输出结果

a is not equal to b.
a is not equal to b.
a is less than b.
a is less than or equal to b.
a is not greater than b.
a is not greater than or equal to b.

布尔运算符

布尔运算符也称为逻辑运算符,用于在Shell脚本中执行逻辑运算。Shell脚本中有3种有效的逻辑运算符-

  • 逻辑AND(&&)计算布尔值的逻辑AND。如果两个操作数均为true,则返回true,否则返回false。

  • 逻辑或(||)计算布尔操作数的逻辑或运算。如果两个操作数均为false,则返回false,否则返回true。

  • 逻辑不等于(!)计算所传递的单个运算符的取反。如果操作数的值为true,则返回false,否则返回true。

示例

a = true
b = false
if(($a == "true" & $b == "true" ))
then
   echo Both are true.
else
   echo Both are not true.
fi
if(($a == "true" || $b == "true" ))
then
   echo Atleast one of them is true.
else
   echo None of them is true.
fi
if(( ! $a == "true" ))
then
   echo "a" was intially false.
else
   echo "a" was intially true.
fi

输出结果

Both are not true.
Atleast one of them is true
a was intially true.

按位运算符是对位变量执行按位运算的运算符。Shell脚本中有6种类型的按位运算符-

  • 按位与(&)是对操作数的位进行二进制与运算的运算符,即,第一变量的每个位都与第二个运算符的相应位进行运算。

  • 按位或(|)是对操作数的位进行二进制或运算的运算符,即,第一变量的每个位都与第二个运算符的相应位进行运算。

  • 按位XOR(^)是对操作数的位进行二进制XOR操作的运算符,即,第一变量的每个位都与第二个运算符的相应位进行运算。

  • 按位补码(〜)是对操作数的位进行二进制NOT运算的运算符,即,第一变量的每个位都与第二个运算符的相应位一起运算。

  • 按位左移(<<)是将操作数的位向左移动n次的操作符,该操作符由操作符的右边指定。

  • 按位左移(>>)是一种运算符,用于将操作数的位向右移位运算符右边指定的n次。

示例

a = 14
b = 67
bitwiseAND=$(( a&b ))

echo Bitwise AND of a and b is $bitwiseAND
bitwiseOR=$(( a|b ))

echo Bitwise OR of a and b is $bitwiseOR
bitwiseXOR=$(( a^b ))

echo Bitwise XOR of a and b is $bitwiseXOR
bitiwiseComplement=$(( ~a ))

echo Bitwise Compliment of a is $bitiwiseComplement
leftshift=$(( a<<1 ))

echo Left Shift of a is $leftshift
rightshift=$(( b>>1 ))

echo Right Shift of b is $rightshift

输出结果

Bitwise AND of a and b is 2
Bitwise OR of a and b is 79
Bitwise XOR of a and b is 77
Bitwise Compliment of a is -15
Left Shift of a is 28
Right Shift of b is 33

文件测试运算符

文件测试操作符用于测试文件的特定属性。一些文件测试运算符是:

  • -b运算符用于检查指定文件是否为块特殊文件。如果文件是块特殊文件,则该函数返回true,否则返回false。

  • -s运算符是用于检查给定文件大小的运算符。如果文件大小大于0,则返回true,否则返回false。

  • -r运算符是检查是否授予对读取文件内容的访问权限的运算符。如果授予读取访问权限,则返回true,否则返回false。

  • -w运算符是检查是否授予对文件写入权限的运算符。如果授予写访问权限,则返回true,否则返回false。

  • -x运算符是检查是否授予执行文件访问权限的运算符。如果授予执行访问权限,则返回true,否则返回false。