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 运算符 是一个运算符,用于检查是否授予执行文件的权限。如果授予执行权限,则返回真,否则返回假。