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 脚本中的关系运算符定义了操作数之间的关系。这些运算符的返回值根据运算符和操作数的不同,或者是真或者是假。Shell 脚本中有 6 种有效的关系运算符:

  • == 运算符 是一个运算符,它使两个运算符的值相等。如果值相等,则返回真,否则返回假。

  • != 运算符 是一个运算符,它使两个运算符的值相等并检查它们是否不相等。如果值不相等,则返回真,否则返回假。

  • < 运算符 是一个小于运算符,用于比较两个运算符的值。如果第一个操作数的值小于第二个操作数的值,则运算符返回真,否则返回假。

  • <= 运算符 是一个小于或等于运算符,用于比较两个运算符的值。如果第一个操作数的值小于或等于第二个操作数的值,则运算符返回真,否则返回假。

  • > 运算符 是一个大于运算符,用于比较两个运算符的值。如果第一个操作数的值大于第二个操作数的值,则运算符返回真,否则返回假。

  • >= 运算符 是一个大于或等于运算符,用于比较两个运算符的值。如果第一个操作数的值大于或等于第二个操作数的值,则运算符返回真,否则返回假。

示例

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 种有效的逻辑运算符:

  • 逻辑与 (&&) 计算布尔值的逻辑与。如果两个操作数都为真,则返回真,否则返回假。

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

  • 逻辑非 (! ) 计算传递的单个操作数的否定。如果操作数的值为真,则返回假,否则返回真。

示例

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 种位运算符:

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

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

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

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

  • 左移 (<<) 是一个运算符,它将操作数的位向左移动运算符右侧指定的 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 运算符 用于检查指定的文件是否为块特殊文件。如果文件是块特殊文件,则函数返回真,否则返回假。

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

  • -r 运算符 是一个运算符,用于检查是否授予读取文件内容的权限。如果授予读取权限,则返回真,否则返回假。

  • -w 运算符 是一个运算符,用于检查是否授予写入文件的权限。如果授予写入权限,则返回真,否则返回假。

  • -x 运算符 是一个运算符,用于检查是否授予执行文件的权限。如果授予执行权限,则返回真,否则返回假。

更新于: 2019-11-22

17K+ 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告