利用(())进行运算
echo $(())
[root@zabbix_ser ~]# echo $((1+3))
4
[root@zabbix_ser ~]# echo $((1-3))
-2
[root@zabbix_ser ~]# echo $((1.2+3))
-bash: 1.2+3: 语法错误: 无效的算术运算符 (错误符号是 ".2+3")
echo $(()) 无法进行小数捡的运算
变量运算输出
[root@zabbix_ser ~]# i=6
[root@zabbix_ser ~]# echo $((i+1))
7
[root@zabbix_ser ~]# echo $((i=i+5))
11
[root@zabbix_ser ~]# echo $((i+=5))
16
[root@zabbix_ser ~]# echo $i
16
i++ 先输出变量的值再进行运算
[root@zabbix_ser ~]# i=5
[root@zabbix_ser ~]# echo $((i++))
5
[root@zabbix_ser ~]# echo $i
6
++i 先进行运算再输出变量的值
[root@zabbix_ser ~]# i=5
[root@zabbix_ser ~]# echo $((++i))
6
[root@zabbix_ser ~]# echo $i
6
PS:别忘记$符号了哦
let 实现运算
[root@zabbix_ser ~]# let i=1+1
[root@zabbix_ser ~]# echo $i
2
PS:需要先将运算结果赋值给一个变量,输出变量
declare 实现运算
[root@zabbix_ser ~]# declare -i i=1+3
[root@zabbix_ser ~]# echo $i
4
[root@zabbix_ser ~]# declare -i i=1.2+6
-bash: declare: 1.2+6: 语法错误: 无效的算术运算符 (错误符号是 ".2+6")
declare无法实现小数间的运算
不要忘记了参数-i哦
expr实现运算
[root@zabbix_ser ~]# expr 1 + 3
4
[root@zabbix_ser ~]# expr 1+3
1+3
[root@zabbix_ser ~]# i=1
[root@zabbix_ser ~]# expr $i + 1
2
[root@zabbix_ser ~]# expr 1.5 + 2.3
expr: 非整数参数
expr 无法实现小数间的运算
可以实现直接运算和变量输出运算
PS:别忘记了空格哟
扩展功能
对整数信息做判断
[root@zabbix_ser scripts]# cat sum.sh
a=$1
b=$2
expr $a + $b &>/dev/null
[ $? -ne 0 ] && {
echo pls input int
exit 1
}
echo $(($a+$b));
对字符串长度进行判断
[root@zabbix_ser scripts]# cat sum1.sh
info=$1
real=$(expr length "$info")
[ $real -ne 18 ]&&{
echo "pls input right number, not 18 bit"
exit 1
}
echo "身份证号码为:$info"
对文件名信息进行判断
有逻辑匹配方式
利用$[] 实现运算
[root@zabbix_ser ~]# echo $[2*6]
12
[root@zabbix_ser ~]# i=3
[root@zabbix_ser ~]# echo $[i*3]
9
[root@zabbix_ser ~]# echo $[i**3]
27
[root@zabbix_ser ~]# echo $[1.5*2]
-bash: 1.5*2: 语法错误: 无效的算术运算符 (错误符号是 ".5*2")
使用这个无法进行小数运算
利用bc实现运算
整数运算
[root@zabbix_ser scripts]# echo 1+2|bc
3
小数运算
[root@zabbix_ser scripts]# echo 1.1+2|bc
3.1
利用awk实现运算
[root@zabbix_ser ~]# echo 2.1 2.2 |awk '{print $1*$2}'
4.62
小练习
环境
[root@zabbix_ser ~]# echo {1..10} >text.txt
[root@zabbix_ser ~]# cat text.txt
1 2 3 4 5 6 7 8 9 10
奇数偶数求和运算
[root@zabbix_ser ~]# awk '{for(i=1;i<=NF;i+=2)sum+=$i}END{print sum}' text.txt
25
[root@zabbix_ser ~]# awk '{for(i=2;i<=NF;i+=2)sum+=$i}END{print sum}' text.txt
30