shell 脚本 2
算术运算
在shell中+就是个字符串
[root@liang ~ 19:59:16]#x=10
[root@liang ~ 20:08:07]#y=20
[root@liang ~ 20:08:13]#z=$x+$y
[root@liang ~ 20:08:28]#echo $z
10+20
如果想进行算术运算就要用相应的写法
bash 中的算术运算:help let
+,-,*,/,%取模( 取余),**乘方
实现算术运算:
1 :let var =算术表达式
[root@liang ~ 20:08:40]#x=10
[root@liang ~ 20:15:20]#y=20
[root@liang ~ 20:15:23]#let z=x+y
[root@liang ~ 20:15:44]#echo $z
30
也可以一个一个的加++
[root@liang ~ 20:15:54]#let x++
[root@liang ~ 20:17:36]#echo $x
11
[root@liang ~ 20:17:42]#let ++x
[root@liang ~ 20:18:26]#echo $x
12
2 :var =$[算术表达式]
[root@liang ~ 20:18:29]#n=2
[root@liang ~ 20:21:38]#m=3
[root@liang ~ 20:21:44]#sum=$[n+m]
[root@liang ~ 20:22:08]#echo $sum
5
3: var=$((算术表达式))
[root@liang ~ 20:52:06]#n=2
[root@liang ~ 20:59:00]#m=3
[root@liang ~ 20:59:56]#sum=$((n+m))
[root@liang ~ 21:00:27]#echo $sum
5
(不确定) 4: var =$(expr arg1 arg2 arg3 ...) expr 一般用于整数值计算 但也可以用于字符串
格式
参数说明
7
11
5: declare -i var =数值
[root@liang ~ 19:55:46]#declare -i x=10
[root@liang ~ 19:57:50]#declare -i y=20
[root@liang ~ 19:58:01]#declare -i c=x+y
[root@liang ~ 19:58:20]#echo $c
30
6:echo ‘算术表达式’ | bc
乘法符号有些场景中需要转义 ,如*
bash有内建的随机数生成器 $RANDOM(0-32767)
echo $[$RANDOM%50] : 0-49之间随机数
取模
[root@liang ~ 20:22:21]#let result=100%3
[root@liang ~ 20:24:18]#echo $result
1
[root@liang ~ 20:24:32]#result=$[100%3]
[root@liang ~ 20:25:09]#echo $result
1
let命令
0 false 假 要与$?区分开 $? 0 成功的
1 true 真 1 假的
0&0=0 0和0
0&1=0
1&0=0
1&1=1
0|0=0 0或0
0|1=1
1|0=1
1|1=1
短路与 &&
短路或 ||
0&&0=0 0和0
0&&1=0
1&&0=0
1&&1=1
但是如果是两个命令结果不一样
cmd1 &&cmd2
cmd1为假 ,cmd2就不需要执行了
cmd1 || cmd2
如果cmd1为真,cmd2不需要执行,cmd1为假,cmd2才执行
亦或^ XOR 对位亦或
0^0=0
0^1=1
1^0=1
1^1=0
a=6 110
b=4 100
c=a^b=2 010
所以利于这个可以做到把a和b的变量互换
[root@liang ~ 19:33:30]#a=6
[root@liang ~ 19:47:25]#b=4
[root@liang ~ 19:47:29]#let c=a^b
[root@liang ~ 19:47:58]#echo $c
2
[root@liang ~ 19:48:13]#echo $a $b
6 4
[root@liang ~ 19:50:51]#a=$[a^b];b=$[a^b];a=$[a^b];echo $a $b
4 6
我们也可以用tmp 把a和b的变量互换
[root@liang ~ 19:54:24]#a=6
[root@liang ~ 19:54:47]#b=4
[root@liang ~ 19:54:52]#tmp=$a
[root@liang ~ 19:55:06]#a=$b
[root@liang ~ 19:55:18]#b=$tmp
[root@liang ~ 19:55:33]#echo $a $b
4 6