Advanced Bash-Scripting Guide学习笔记-操作符、数字常量

上节收尾

.....接着上一节的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" 二进制