1、算数运算符
在 shell 中,bash 不支持原生的数学运算,需要利用第三方工具来如 let,expr 等来实现
1、let
let 运算后需要将其赋值给一个变量。
zhangl@zhangl-PC:~/code/shell$ A=1zhangl@zhangl-PC:~/code/shell$ B=2zhangl@zhangl-PC:~/code/shell$ let C=${A}+${B} # 运算符前后不能有空格zhangl@zhangl-PC:~/code/shell$ echo ${C}3
2、expr
可以利用 expr 对数组进行运算,C=$(expr $A+$B)+ 号两边需要有空格,不然会将其当作字符串连接
zhangl@zhangl-PC:~/code/shell$ C=`expr ${A} + ${B}`zhangl@zhangl-PC:~/code/shell$ echo ${C}3
3、[]
zhangl@zhangl-PC:~/code/shell$ D=$[${A}+${B}]zhangl@zhangl-PC:~/code/shell$ echo ${D}3
4、(())
zhangl@zhangl-PC:~/code/shell$ E=$((${A}+${B}))zhangl@zhangl-PC:~/code/shell$ echo ${E}3
2、关系运算符
关系运算符只能比较数字,不能用其来比较字符串

num1=1num2=2if [ ${num1} -eq ${num2} ]thenecho "${num1} -eq ${num2} : num1 等于 num2"elseecho "${num1} -eq ${num2} : num1 不等于 num2"fiif [ $num1 -ne $num2 ]thenecho "$num1 -ne $num2: num1 不等于 num2"elseecho "$num1 -ne $num2 : num1 等于 num2"fiif [ $num1 -gt $num2 ]thenecho "$num1 -gt $num2: num1 大于 num2"elseecho "$num1 -gt $num2: num1 不大于 num2"fiif [ $num1 -lt $num2 ]thenecho "$num1 -lt $num2: num1 小于 num2"elseecho "$num1 -lt $num2: num1 不小于 num2"fiif [ $num1 -ge $num2 ]thenecho "$num1 -ge $num2: num1 大于或等于 num2"elseecho "$num1 -ge $num2: num1 小于 num2"fiif [ $num1 -le $num2 ]thenecho "$num1 -le $num2: num1 小于或等于 num2"elseecho "$num1 -le $num2: num1 大于 num2"fi
3、布尔运算符
与或非
#!/bin/bashnum1=10num2=20if [ $num1 -lt 40 -a $num2 -gt 15 ];thenecho "$num1 小于 40 且 $num2 大于 15 : 返回 true"elseecho "$num1 小于 40 且 $num2 大于 15 : 返回 fnum1lse"fiecho "或运算"if [ $num1 -lt 40 -o $num2 -gt 40 ];thenecho "$num1 小于 40 或 $num2 大于 40 : 返回 true"elseecho "$num1 小于 40 或 $num2 大于 40 : 返回 fnum1lse"fiecho "非运算"if [ $num1 != $num2 ];thenecho "$num1 != $num2 : num1 不等于 num2"elseecho "$num1 != $num2: num1 等于 num2"fi
4、逻辑运算符

#!/bin/bashnum1=1num2=2if [[ $num1 -lt 5 && $num2 -gt 5 ]];thenecho "返回 true"elseecho "返回 false"fiif [[ $num1 -lt 5 || $num2 -gt 5 ]];thenecho "返回 true"elseecho "返回 false"fi
5、字符串运算符
= 和 == 相同 都是判断是否相等
#!/bin/bashstr1="linux"str2="shell"if [ $str1 = $str2 ];thenecho "$str1 = $str2 : str1 等于 str2"elseecho "$str1 = $str2: str1 不等于 str2"fiif [ $str1 != $str2 ];thenecho "$str1 != $str2 : str1 不等于 str2"elseecho "$str1 != $str2: str1 等于 str2"fiif [ -z $str1 ];thenecho "-z $str1 : 字符串长度为 0"elseecho "-z $str1 : 字符串长度不为 0"fiif [ -n "$str1" ];thenecho "-n $str1 : 字符串长度不为 0"elseecho "-n $str1 : 字符串长度为 0"fiif [ ${str1} ];thenecho "str1 : 字符串不为空"elseecho "str1 : 字符串为空"fi
6、文件测试运算符

#!/bin/bash# 遍历给定目录,统计目录下的file、dir数量# 判断输入参数:如果参数个数不是1个,提示错误[ $# -ne 1 ] && echo "输入参数错误, ${0} check_dir" && exit 1# 扫描路径为第一个参数PATH=$1# 如果路径不存在,输出错误提示[ ! -d ${PATH} ] && echo "目录${PATH}不存在" && exit 1# 定义数组,存储DIRS=()FILES=()OTHERS=()DIR_NO=0FILE_NO=0OTHER_NO=0for item in ${PATH}/*doif [ -d ${item} ];thenDIRS[${#DIRS[*]}]="${item}"DIR_NO=$[${DIR_NO}+1]elif [ -f ${item} ];thenFILES[${#FILES[*]}]="${item}"FILE_NO=$((${FILE_NO}+1))elseOTHERS[${#OTHERS[*]}]="${item}"OTHER_NO=`expr ${OTHER_NO}+1`fidoneecho "目录的数量是: ${#DIRS[*]}"echo "文件的数量是: ${#FILES[*]}"echo "其他的数量是: ${#OTHERS[*]}"echo "-------------------------------------"echo "DIR数量是: ${DIR_NO}"echo "FILE数量是: ${FILE_NO}"echo "OTHER数量是: ${OTHER_NO}"echo "------------------------------------"echo "DIR列表: ${DIRS[*]}"echo "FILE列表: ${FILES[@]}"echo "OTHER列表: ${OTHERS[*]}"
