算术运算
shell 支持算术运算,但只支持整数,不支持小数
bash中的算术运算
+ - * / % 取模,即取余数,示例:9%4=1,5%3=2 ** 乘方
乘法符号有些场景中需要转义
实现算术运算:
(1) let var=算术表达式
(2) ((var=算术表达式)) 和上面等价
(3) var=[算术表达式]
(4) var=((算术表达式))
(5) var=$(expr arg1 arg2 arg3 ...)
(6) declare –i var = 数值
(7) echo '算术表达式' | bc
内建的随机数生成器变量:
$RANDOM 取值范围:0-32767
范例:
#生成 0 - 49 之间随机数
echo [RANDOM%50]
#随机字体颜色
[root@centos8 ~]#echo -e "/033[1;$[RANDOM%7+31]hello/033[0m"
magedu
增强型赋值:
+= i+=10 相当于 i=i+10 -= i-=j 相当于 i=i-j *= /= %= ++ i++,++i 相当于 i=i+1 -- i--,--i 相当于 i=i-1
格式:
let varOPERvalue
范例:
[root@centos8 ~]#let i=10*2
[root@centos8 ~]#echo i
20
[root@centos8 ~]#((j=i+10))
[root@centos8 ~]#echoj
30
范例:
#自加3后自赋值
let count+=3
[root@centos8 ~]#i=10
[root@centos8 ~]#let i+=20 #相当于let i=i+20
[root@centos8 ~]#echo i
30
[root@centos8 ~]#j=20
[root@centos8 ~]#let i*=j
[root@centos8 ~]#echoi
600
范例:
#自增,自减 let var+=1 let var++ let var-=1 let var-- [root@centos8 ~]#unset i j ; i=1; let j=i++; echo "i=i,j=j" i=2,j=1 [root@centos8 ~]#unset i j ; i=1; let j=++i; echo "i=i,j=j" i=2,j=2
范例:
[root@centos8 ~]#expr 2 * 3
expr: syntax error: unexpected argument ‘anaconda-ks.cfg’
[root@centos8 ~]#ls
anaconda-ks.cfg
[root@centos8 ~]#expr 2 /* 3
6
范例:
[root@centos8 ~]#echo "scale=3;20/3"|bc
6.666
范例:
[root@centos8 ~]#i=10 [root@centos8 ~]#j=20 [root@centos8 ~]#declare -i result=i*j [root@centos8 ~]#echo $result 200
范例:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
[root@centos8 scripts]#cat chook_rabbit.sh #!/bin/bash # #******************************************************************** #Author: wangxiaochun #QQ: 29308620 #Date: 2020-04-01 #FileName: chook_rabbit.sh #URL: http://www.magedu.com #Description: The test script #Copyright (C): 2020 All rights reserved #******************************************************************** HEAD=1 FOOT=2 RABBIT=(((FOOT-HEAD-HEAD)/2)) CHOOK=[HEAD-RABBIT] echo RABBIT:RABBIT echo CHOOK:CHOOK [root@centos8 scripts]#./chook_rabbit.sh 30 80 RABBIT:10 CHOOK:20 [root@centos8 scripts]#
2.10 逻辑运算
true, false 1, 0
与:&:和0相与,结果为0,和1相与,结果保留原值 1 与 1 = 1 1 与 0 = 0 0 与 1 = 0 0 与 0 = 0
或:|:和1相或结果为1,和0相或,结果保留原值
1 或 1 = 1 1 或 0 = 1 0 或 1 = 1 0 或 0 = 0
非:! 1 = 0 ! true! 0 = 1
异或:^ 异或的两个值,相同为假,不同为真。两个数字X,Y异或得到结果Z,Z再和任意两者之一X异或,将得出另一个值Y
1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 = 1 0 ^ 0 = 0
范例:
[root@centos8 ~]#true
[root@centos8 ~]#echo ?
0
[root@centos8 ~]#false
[root@centos8 ~]#echo?
1
[root@centos8 ~]#! true
[root@centos8 ~]#echo ?
1
[root@centos8 ~]#! false
[root@centos8 ~]#echo?
0
[root@centos8 ~]#x=10;y=20;temp=x;x=y;y=temp;echo x=x,y=y
x=20,y=10
[root@centos8 ~]#x=10;y=20;x=[x^y];y=[x^y];x=[x^y];echo x=x,y=y
x=20,y=10
短路运算
- 短路与
CMD1 短路与 CMD2
第一个CMD1结果为真 (1),第二个CMD2必须要参与运算,才能得到最终的结果
第一个CMD1结果为假 (0),总的结果必定为0,因此不需要执行CMD2
- 短路或
CMD1 短路或 CMD2
第一个CMD1结果为真 (1),总的结果必定为1,因此不需要执行CMD2 第一个CMD1结果为假 (0),第二个CMD2 必须要参与运算,,才能得到最终的结果
本文链接:http://www.yunweipai.com/34331.html
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/52547.html