【备忘】 Bash Shell算术运算&条件判断

菜鸟这几天学了Bash的一些东西,那些条件测试、算术运算什么的真令人头疼。What a headache!

So let's do a summary.

 

算术运算

Bash中做算术运算有N种方式。Unfortunately, Bash supports only integer!!!只支持整数,所以想用浮点什么的就用bc、awk什么的吧,这里就不说了。

还有,bash里有小数都是直接丢掉小数点后的,比如6/5=1。

 

 一、((expression))  --> bash关键字

这个很简单,我也最喜欢这种,直接在括号里面写表达式就行了。比如:

1 $ (( C = 1 + 2 ))
2 $ echo $C
3 3

如果不在括号内赋值的话:

1 $ C=$(( 1 + 2 ))
2 $ echo $C
3 3

注意别忘了括号前的$,负责会报错。但括号里的空格可以省略,加上更好看。。。

 

更多:

1 $ (( 1 == 1 ))
2 $ echo $?
3 0
4 
5 $ (( 1 == 2 ))
6 $ echo $?
7 1
1 $ C=1
2 $ (( C++ )) # 括号中引用变量不需要$,Bash会自动解析
3 $ echo $C
4 2
5 # 自增也支持,具体支持哪些操作符可以查看man手册

 

二、let  --> shell built-in

let用法和上面的差不多,但后面的表达式不能有空格。For instance:

 1 $ let C=1+2 # 也不需要加$
 2 $ echo $C
 3 3
 4 
 5 $ let C*=3
 6 $ echo $C
 7 9
 8 
 9 
10 $ let 1==1
11 $ echo $?
12 0
13 
14 $ let 1==2
15 $ echo $?
16 1

 

三、expr  --> 一个命令

它的参数必须有空格。

 1 $ expr 1 + 1
 2 2
 3 
 4 $ expr 2 \* 3 # *需要转义
 5 6
 6 
 7 $ 1 == 1
 8 1
 9 
10 $ 1 != 1
11 0
12 
13 $ expr length hello # 还可以轻微操作字符串。。。
14 5

 

这个的逻辑运算好像和前两个不一样。这里是true:1,false:0,上面是true:0,false:1。

 

四、$[expression]

和let等效,快被弃用了('男人'说的)。总的来说推荐用第一种。

 

条件判断

 一、test(或者说单方括号[  ])

 

 1 $ test 1 == 1 或 [ 1 == 1 ]
 2 $ echo $?
 3 0
 4 
 5 $ test 1 == 2 或 [ 1 == 2 ]
 6 $ echo $?
 7 1
 8 
 9 $ STRING="hello"
10 $ test $STRING == 'hello' 或 [ $STRING == 'hello' ]
11 $ echo $?
12 0
13 $ [ $STRING != "hello" ]
14 $ echo $?
15 1
16 
17 $ test -e /usr/bin/ping 或 [ -e /usr/bin/ping ]
18 $ echo $?
19 0

 

 

二、双方括号[[  ]]

 

$ [[ 1 == 1 ]]
$ echo $?
0

$ [[ 1 == 2 ]]
$ echo $?
1

$ [[ 1 -gt 2 ]]
$ echo $?
1

$ STRING="hello"
$ [[ $STRING == 'hello' ]]
$ echo $?
0
$ [[ $STRING != "hello" ]]
$ echo $?
1

$ [[ -e /usr/bin/ping ]]
$ echo $?
0

 

可以看出两种方式差不多,但还是有区别的。

 1 $ [ 1 == 1 ] && [ 2 == 2 ]
 2 $ echo $?
 3 0
 4 
 5 $ [[ 1 == 1 && 2 == 2 ]]
 6 $ echo $?
 7 0
 8 
 9 $ [ 1 == 1 ] && [ 2 == 3 ]
10 $ echo $?
11 1
12 
13 $ [[ 1 == 1 && 2 == 3 ]]
14 $ echo $?
15 1

可见单括号是不支持逻辑运算符的。要在外面进行逻辑运算才行。

所以更喜欢双括号。

 

有错误请不吝赐教。

转载于:https://www.cnblogs.com/WEREWOLFGHOST-Zedekiah/p/6789857.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值