原生bash不支持简单的数学运算,但是可借助于expr/awk等命令实现,这两个命令尤其强大
算数运算符
echo "shell编程之运算符"
echo "输入的第一个参数x:$1"
echo "输入的第二个参数y:$2"
x=$1
y=$2
echo "x+y=`expr $1 + $2`"
echo "x-y=`expr $1 - $2`"
echo "x*y=`expr $1 \* $2`"
echo "y/x=`expr $2 / $1`"
echo "y%x=`expr $2 % $1`"
if [ $1 == $2 ]
then
echo "x 等于 y"
fi
if [ $1 != $2 ]
then
echo "x 不等于 y"
fi
chmod u+x test.sh
./test.sh 5 10
###输出结果###
shell编程之运算符
输入的第一个参数x:5
输入的第二个参数y:10
x+y=15
x-y=-5
x*y=50
y/x=2
y%x=0
x 不等于 y
注意:
1.进行算数运算时参数一定要空格,例如 $x + $y,而 $x+$y是错误的;
2.条件运算符之间要严格的空格,例如 [ $x == $y ],而 [$x == $y]是错误的;
3.expr命令需要``来包裹,不是单引号,而是Esc键下面那个;
4.使用乘法时需要结合 "\*"来使用;
关系运算符
关系运算符不支持字符串,除非该字符串是数字
命令
|
说明
|
-eq
|
判断两值是否相等
|
-ne
|
判断两值是否不相等
|
-gt
|
判断左边的数是否大于右边的数
|
-lt
|
判断左边的数是否小于右边的数
|
-ge
|
判断左边的数是否大于等于右边的数
|
-le
|
判断左边的数是否小于等于右边的数
|
a=5
b=10
if a -eq b
then
echo "a -eq b 为true"
else
echo "a -eq b 为false"
fi
chmod u+x test.sh
./test.sh
###输出结果###
a -eq b 为false
逻辑/布尔运算符
命令
|
说明
|
!
|
非运算,表示取反
|
-o或者 ||
|
或运算,表示其中一个满足时返回true
|
-a或者 &&
|
与运算,表示同时满足时返回true
|
字符串运算符
命令
|
说明
|
=
|
判断两字符串是否相等
|
!=
|
判断两字符串是否相等,不相等返回true
|
-z
|
判断字符串长度是否为0,为0返回true
|
-n
|
判断字符串长度是否为0,不为0返回true
|
[$str]
|
判断字符串是否为空,不为空返回true
|
z="sss"
v="ddd"
if [ $z ]
then
echo "变量z值不为空"
else
echo "变量z值为空"
fi
if [ $z = $v ]
then
echo "z和v相等"
else
echo "z和v不相等"
fi