一、认识运算符
1,运算符介绍
【+】【-】【*】【/】:加减乘除
【%】:取余
【^】或者【**】:幂、指数,2^10=1024,10个2相乘;
【i++】或者【i=i+1】:计数,计算次数累计
【j=j+??】或者【j+=??】:求和;
【&&】:并且的意思;
【||】:或者的意思;
【$RANDOM】:随机数
2,取余【%】
[root@gong tmp]# echo 10%3 | bc
1
3,取余配合随机数【$RANDOM】
可以控制我们随机数的大小;
[root@gong tmp]# echo $RANDOM%22 | bc
19
[root@gong tmp]# echo $RANDOM%5 | bc
3
4,并且【&&】
&&前面执行成功了,才执行后面的命令
[root@gong tmp]# ls /etc/hosts >> /dev/null && echo "目录存在"
目录存在
&&前面不成功,则不执行后面的语句
[root@gong tmp]# ls /etc/xinjizhiwa 2> /dev/null && echo "目录存在"
5,或者【||】
||前面执行失败了,才执行后面的命令;
[root@gong tmp]# ls /etc/xinjizhiwa 2> /dev/null || echo "查询目标不存在"
查询目标不存在
||前面执行成功了,则不执行后面的命令;
[root@gong tmp]# ls /etc/hosts 2> /dev/null || echo "查询目标不存在"
#什么都不显示
二、运算方法
1,运算方法的种类
1,awk:
可以计算,可以带小数,也可以使用shell进行变量传递;一般的计算都可以使用awk;
2,bc:
带小数,计算方便,但是需要安装bc命令;
3,expr:
进行计算,不带小数,纯整数计算;
4,let:
计算整数,变量直接就可以使用,用于计算自增i++
5,$(()):
进行计算整数,变量也可以直接使用
6,$[]:
进行计算整数,变量也可以直接使用
2,awk进行计算
· 计算小数
[root@gong tmp]# awk 'BEGIN{print 3/10}'
0.3
[root@gong tmp]# awk 'BEGIN{print 3/10*100}'
30
· awk使用shell变量
[root@gong tmp]# xin=3
[root@gong tmp]# ji=10
[root@gong tmp]# awk -vf=$xin -vg=$ji 'BEGIN{print f/g}'
0.3
· awk内直接声明变量
[root@gong tmp]# awk -vf=30 -vg=100 'BEGIN{print f/g}'
0.3
3,bc进行计算
[root@gong tmp]# echo 30/100 | bc -l
.30000000000000000000
[root@gong tmp]# echo 1/3 | bc -l
.33333333333333333333
[root@gong tmp]# echo 2^10 | bc -l
1024
4,expr进行计算
温馨提示,expr不能直接使用*作为乘法,需要转义;【\*】
· 运算符之间加空格
[root@gong tmp]# expr 1+1
1+1
[root@gong tmp]# expr 1 + 1
2
· 乘法\*转义
[root@gong tmp]# expr 2 * 3
expr: syntax error
[root@gong tmp]# expr 2 \* 3
6
· 不能计算小数
[root@gong tmp]# expr 2 / 3
0
[root@gong tmp]# expr 6 / 3
2
· expr一个小坑
使用expr计算0+0的时候,计算的结果是0,$?查看上一次命令是否正确时,返回数值却是1,未来我们通过其他方法特性,来判断是否为数字;
[root@gong tmp]# expr 1 + 1
2
[root@gong tmp]# echo $?
0
下面命名计算对了,课时查看上一步命令是否正确时返回却是非0;一个坑;
[root@gong tmp]# expr 0 + 0
0
[root@gong tmp]# echo $?
1
5,let进行计算
[root@gong tmp]# xin=666
[root@gong tmp]# ji=999
[root@gong tmp]# let c=xin+ji
[root@gong tmp]# echo $c
1665
6,$(())进行计算
[root@gong tmp]# xin=666
[root@gong tmp]# ji=999
[root@gong tmp]# echo $((xin+ji))
1665
[root@gong tmp]# d=$((xin+ji))
[root@gong tmp]# echo $d
1665
7,$[]进行计算
[root@gong tmp]# xin=666
[root@gong tmp]# ji=999
[root@gong tmp]# e=$[xin+ji]
[root@gong tmp]# echo $e
1665
8,案例
编辑脚本:用户通过输入两个数字和运算符来计算出结果
[root@gong ~]# vim al.sh
#!/bin/bash
read -p "请输入第一个数字:" num1
read -p "请输入运算符(+-*/^):" shell
read -p "请输入下一个数字:" num2
res=`echo $num1 $shell $num2 | bc -l`
echo $res
[root@gong ~]# sh al.sh
请输入第一个数字:30
请输入运算符(+-*/^):/
请输入下一个数字:100
.30000000000000000000