shell运算符
在Shell编程中,运算符用于执行各种算术、字符串和逻辑操作。以下是一些常见的Shell运算符及其用法:
算术运算符
Shell中的算术运算符通常用于整数运算。以下是一些常见的算术运算符:
+
:加法-
:减法*
:乘法/
:除法%
:取余**
:幂运算(在某些Shell中可能需要启用扩展)
示例:
sh
#!/bin/bash
a=10
b=5
sum=$((a + b))
diff=$((a - b))
prod=$((a * b))
quot=$((a / b))
rem=$((a % b))
exp=$((a ** b)) # 在某些Shell中可能需要使用 let 或 bc
echo "Sum: $sum"
echo "Difference: $diff"
echo "Product: $prod"
echo "Quotient: $quot"
echo "Remainder: $rem"
echo "Exponentiation: $exp" # 如果不支持,可以使用 let 或 bc
注意:在某些Shell中(如Bash),**
运算符可能不被直接支持,可以使用let
命令或bc
工具进行幂运算。
字符串运算符
字符串运算符用于比较和测试字符串。以下是一些常见的字符串运算符:
=
:等于!=
:不等于-z
:字符串长度为零-n
:字符串长度非零str1
=~
regex
:字符串匹配正则表达式(Bash特有)
示例:
sh
#!/bin/bash
str1="hello"
str2="world"
str3=""
if [ "$str1" = "$str2" ]; then
echo "str1 is equal to str2"
else
echo "str1 is not equal to str2"
fi
if [ -z "$str3" ]; then
echo "str3 is empty"
else
echo "str3 is not empty"
fi
if [[ "$str1" =~ ^he.* ]]; then
echo "str1 matches the regex"
else
echo "str1 does not match the regex"
fi
关系运算符
关系运算符用于测试两个数值之间的关系。以下是一些常见的关系运算符:
-eq
:等于-ne
:不等于-lt
:小于-le
:小于或等于-gt
:大于-ge
:大于或等于
示例:
sh
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]; then
echo "a is equal to b"
else
echo "a is not equal to b"
fi
if [ $a -lt $b ]; then
echo "a is less than b"
else
echo "a is not less than b"
fi
逻辑运算符
逻辑运算符用于布尔运算。以下是一些常见的逻辑运算符:
!
:逻辑非-a
:逻辑与(AND)-o
:逻辑或(OR)
示例:
sh
#!/bin/bash
a=true
b=false
if [ $a -a $b ]; then
echo "Both a and b are true"
else
echo "Either a or b is false"
fi
if [ ! $a ]; then
echo "a is false"
else
echo "a is true"
fi
注意:在[[ ... ]]
条件测试结构中,逻辑与和逻辑或可以使用&&
和||
代替-a
和-o
。
位运算符
位运算符用于对整数进行位操作。以下是一些常见的位运算符:
<<
:左移>>
:右移&
:按位与|
:按位或^
:按位异或~
:按位非
示例:
sh
#!/bin/bash
a=60 # 60 = 0011 1100
b=13 # 13 = 0000 1101
let c=a<<2 # c = 240 = 1111 0000
let d=a>>2 # d = 15 = 0000 1111
let e=a&b # e = 12 = 0000 1100
let f=a|b # f = 61 = 0011 1101
let g=a^b # g = 49 = 0011 0001
let h=~a # h = -61 = 1100 0011
echo "a << 2 -> $c"
echo "a >> 2 -> $d"
echo "a & b -> $e"
echo "a | b -> $f"
echo "a ^ b -> $g"
echo "~a -> $h"
这些是Shell编程中一些常见的运算符及其用法。根据具体需求,可以选择合适的运算符进行编程。