首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Shell基础教程03 运算

shell的运算和其他语言有很大不同

(我们暂时只了解这些运算符的基本用法,方便展开讨论后面的内容,高级应用以后穿插着介绍)

数学运算

先看栗子:

ss@ANDROID:~$ let n=3+1 # 加法

ss@ANDROID:~$ i=$[3-1] # 减法

ss@ANDROID:~$ j=$((3*2)) # 乘法,等价于$[]形式。

ss@ANDROID:~$ k=$(expr 3 / 2) # 除法,运算符两边必须使用空格分隔。

ss@ANDROID:~$ ((m=3%2)) # 取模,等价于$()形式

这里我就不echo出变量的值了,你试着echo下会不会发现有些值和预想中的不同?是的,虽然shell内置了对整数四则运算的支持,但是并不支持浮点运算,要做精密计算可以使用bc命令。

ss@ANDROID:~$ echo 3.1415926 * 2.1 | bc

6.5973444

ss@ANDROID:~$

上面有个陌生的符号——“|”,在Linux中叫做管道符,它的作用是将上一个命令的输出给下一个命令的输入。通过管道符就能将文本流串联起来,Linux有个设计哲学:一个命令只做一件事,并把事情做好,通过管道符将各个命令组合起来完成复杂的任务。

判断

数字判断:

ss@ANDROID:~$ [[ 3 -eq 2 ]] # 等于

ss@ANDROID:~$ echo $?

1

ss@ANDROID:~$ [[ 3 -ne 2 ]] # 不等于

ss@ANDROID:~$ echo $?

ss@ANDROID:~$ [[ 3 -gt 2 ]] # 大于

ss@ANDROID:~$ echo $?

ss@ANDROID:~$ [[ 3 -lt 2 ]] # 小于

ss@ANDROID:~$ echo $?

1

ss@ANDROID:~$ [[ 3 -le 2 ]] # 小于等于

ss@ANDROID:~$ echo $?

1

ss@ANDROID:~$ [[ 3 -ge 2 ]] # 大于等于

ss@ANDROID:~$ echo $?

字符串判断

ss@ANDROID:~$ [[ "3" == "2" ]] # 等于

ss@ANDROID:~$ echo $?

1

ss@ANDROID:~$ [[ "3" != "2" ]] # 不等于

ss@ANDROID:~$ echo $?

ss@ANDROID:~$ [[ -z "" ]] # 字符串为空

ss@ANDROID:~$ echo $?

ss@ANDROID:~$ [[ -n "" ]] # 字符串不为空

ss@ANDROID:~$ echo $?

1

ss@ANDROID:~$

shell的判断感觉怪怪的,数字判断用英文字符,字符串判断用数学运算符。那既然是“祖师爷”他们定的规矩就照做吧。上文中的0和1是命令的退出状态码,0表示正常,1以上的表示不正常,而获取上一条命令的退出状态码则用“$?”。

“[[ ]]" 可以用 "[ ]" 替代,"[ ]" 可以用test命令替代:

ss@ANDROID:~$ test 3 -ge 2

ss@ANDROID:~$ echo $?

ss@ANDROID:~$

但是建议使用"[[ ]]",暂时不要问为什么哈。另外”[[ ]]“里组成的每个元素需要用空格分隔。

逻辑运算

-a # 逻辑与

-o # 逻辑或

! # 逻辑否

&& # 逻辑与

|| # 逻辑或

"-a"、"-o"用在"[[ ]]"里面,”&&“、”||"用在多个"[[ ]]"之间。"!"里外都可以。

总结

shell内置的四则运算并不支持浮点运算

扩展知识 “|”、bc命令、$?、退出状态码

数字判断用英文字符,字符串判断用数学运算符

-a、-o、!、&&、||

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180420G07H9Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券