1. shell中的基本运算
Shell 支持多种运算符,包括:
1.1 算术运算符
#!/bin/bash
a=12
# 加法
b=$(($a+4))
echo "两数之和为: $b"
# 两数之和为: 16
# -,*,/,%(取余)类似
使用expr,bc,awk等
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
注意:使用expr 时,表达式和运算符之间要有空格
# 反引号`` 中为可执行的shell命令,其结果可赋值给变量
b=`expr $a + 4`
b=`expr 10 \* 2`
# 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
# expr不支持浮点除法,可以用bc 或 awk实现
num3=`echo "scale=2; $num1/$num2" | bc`
# sclae控制小数点后保留几位
echo "$num1 $num2" | awk '{printf ("%.2f\n",$1/$2)}'
# 百分数
num3=$(echo "$num1 $num2" | awk '{printf ("%.2f%\n",($1/$2)*100)}')
判断相等
a=10
b=20
if [ $a == $b ];then
echo "a 等于 b"
fi
# 不相等
[ $a != $b ]
1.2 关系运算符
只支持数字,不支持字符串,除非字符串的值是数字。
-eq 检测两个数是否相等,相等返回 true,不相等返回 false。
-ne 是否不相等
-gt >
-lt <
-ge >=
-le <=
1.3 布尔运算符
a=10
b=20
! 非运算,表达式为 true 则返回 false。 [ ! false ] 返回 true。
-o 或运算(or) [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算(and) [ $a -lt 20 -a $b -gt 100 ] 返回 false。
1.4 逻辑运算符
a=10
b=20
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
1.5 字符串运算符
假定变量 a 为 "abc",变量 b 为 "efg":
= 检测两个字符串是否相等,相等返回 true。 [ "$a" = "$b" ] 返回 false。
!= 是否不相等 [ "$a" != "$b" ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z "$a" ] 返回 false。
-n 是否不为0 [ -n "$a" ] 返回 true。
$ 检测字符串是否为空,不为空返回 true。 [ "$a" ] 返回 true。
变量最好用“”括起来,防止变量内部有空格,导致错误
1.6 文件测试运算符
file 表示文件 /var/zz/test.sh
-d file 检测文件是否是目录,如果是,则返回 true。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true。
-r file 检测文件是否可读
-w file 是否可写
-x file 是否可执行
-s file 是否为空(文件大小是否大于0),不为空返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。
[ -e $file ] 返回 true。
example: 检测aa.txt是否存在,存在则输出‘exist’
test -e aa.txt && echo 'exist' || echo 'not exist!'
2. 数组
定义字符串: A="a b c def"
定义字符数组: A=(a b c def)
命令 | 含义 | 输出 |
${A[@]} | 返回数组全部元素 | a b c def |
${A[*]} | 返回数组全部元素 | a b c def |
${A[0]} | 返回数组第一个元素 | a |
${A[-2]} | 返回数组倒数第二个元素 | c |
${#A[@]} | 返回数组元素总数 | 4 |
${#A[*]} | 返回数组元素总数 | 4 |
${#A[3]} | 返回数组第四个元素的长度 | 3 |
A[3]=xyz | 给数组元素第四个元素赋值 | xyz |