上节收尾
.....接着上一节的Test章节
混合比较
-a 逻辑与 expr1 -a expr2 如果expr1与expr2均为真,则整体为真返回true
-o 逻辑或 expr1 -o expr2 如果expr1与expr2有一个为真,则整体为真返回true
经常这样使用 if [ "$expr1" -a "$epr2" ] 还有另外一种写法与bash的这种写法等价
if [[ "$expr1" && "expr2" ]]
1.操作符
算术操作符
加、减、乘、除、幂、模 + - * / ** %
加等 +=
减等 -=
乘等 *=
除等 /=
模等 %=
expr 5 / 3 输出1
let "a=3**2" echo "a=$a"输出a=9
expr 5 % 3 输出2
为了进一步学习expr以及%的使用,通过两个参数检查的脚本来看一下,这里假设脚本均需要输入两个整数参数
example1:查找两个参数的最大公约数
cat example1.sh
#!/bin/bash
[ $# -eq 0 ] && { echo "Usage:$(basename $0) ars1 args2.";exit -1; }
num1=$1
num2=$2
remainder=2 # 赋予一个初始值以便于进入循环判断,否则会报错
until [ "$remainder" -eq 0 ]
do
remainder=$(expr "$num1" % "$num2")
num1=$num2
num2=$remainder
done
echo "$1与$2的最大公约数是$num1"
exit $?
example2:检查两个参数是否均为整数
cat example2.sh
#!/bin/bash
if [ $# -eq 0 ];then
echo "Usage: $(basename $0) args1 args2."
exit -1
fi
for args in $@
do
expr $args + 0 &>/dev/null
[ $? -eq 0 ] || echo "$args is not integer."
done
exit 0
逻辑操作符
&& ||
对于这两种操作符在shell脚本中的使用方式,下面作了总结
if [ "$a" -eq 1 ] && [ "$b" -eq 2 ] 等同于
if [[ "$a" -eq 1 && "$b" -eq 2 ]] 等同于
if [ "$a" -eq 1 -a "$b" -eq 2 ]
同理||也类似
逻辑操作符除了用于以上的判断场景,有时候也可用于算数场景
echo $((1&&2)) 输出1
echo $((1||0)) 输出1
逗号操作符
let "a=$((5+3,3-1,12-0))"
echo $a 输出12
2.数字常量
let "var=32"
echo "$var" 输出32(十进制)
let "var=032"
echo "$var" 八进制
let "var=0x32"
echo "$var" 十六进制
但是如果是其它进制(介于2到64)
写法如下
let "var=2#1111"
echo "$var" 二进制