shell运算符

熟练掌握以上运算符能够自如的应对linux日常shell脚本需求。

数值运算符

只能用在数字上,不能用在其它数据类型上

算术运算符

基本

就是常见的数学用到的计算:+、-、*、/、%

默默认情况下,shell不会直接进行算术运算,而是把"算术符号"当做"字符串"与两个变量的值连接在了一起,形成了一个新的字符串。
这是因为,在 Bash Shell 中,如果不特别指明,所有的内容都是字符串,无论有没有使用引号。
换句话说,Bash shell 在默认情况下不会区分变量类型,即使你将数字赋值给变量,它们也会被视为字符串。

a=1+2`
echo $a # 打印:1+2

那也就是说Shell 不能直接进行算数运算,必须使用数学计算命令。常用的数学计算命令如下表所示。

运算操作符/运算命令 说明
(( )) 用于整数运算,效率很高,推荐使用。
let 用于整数运算,和 (()) 类似。
$[] 用于整数运算,不如 (()) 灵活。
expr 可用于整数运算,也可以处理字符串。比较麻烦,需要注意各种细节,不推荐使用。
bc Linux下的一个计算器程序,可以处理整数和小数。Shell 本身只支持整数运算,想计算小数就得使用 bc 这个外部的计算器。
declare -i 将变量定义为整数,然后再进行数学运算时就不会被当做字符串了。功能有限,仅支持最基本的数学运算(加减乘除和取余),不支持逻辑运算、自增自减等,所以在实际开发中很少使用。
举个例子
# 示例:expr表达式
v1=`expr 2 + 2`
echo "两数之和:$v1"    # 两数之和:4
 
# 示例:$(())
v2=$((2 + 2))
echo "两数之和:$v2"  # 两数之和:4
 
# 示例:let 
let v3=1+2
echo "两数之和:$v3"  # 两数之和:3
 
 
#示例:expr表达式为乘,则需要转义
v4=`expr 2 \* 2`
echo "两数乘积:$v4"   # 两数乘积:4

比较

就是比较关系的:> 、>= 、 <、 <=、 ==、 !=

echo $(( 2 <= 5 ) # 输出:1

关系运算符

为了方便开发人员shell还单独定义了一些关键字作为运算符,同样也只支持数字

参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

它们总是结合shell的test测试功能 用在条件控制语句(if、while)上,
不能直接用于输出 echo $a -eq $b,会直接作为字符输出为 $a -eq $b
也不能使用算数算术运算符特有的方式去写 echo $[$a -eq $b],会报错 因为他压根就不是算数算术运算

num1=100
num2=100
if [ $a -eq $b ]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

# 或者 利用test结合||或&& (因为test结果本身不能直接输出 没有返回值 不像其它语言)
[ $a -eq $b ] && echo 相等  # 打印:相等

字符串运算符

= : 字符串相等比较运算符,相等返回true
!= : 字符串不相等比较运算符,不相等返回true
-z : 检查字符串长度是否为零,为0返回true
-n : 检查字符串长度是否不为零,不为0返回true
$ : 检查字符串是否不为空,不为空返回true
< : 检查第一个字符串是否按字典顺序小于第二个字符串
> : 检查第一个字符串是否按字典顺序大于第二个字符串

同样的字符串运算符也是结合test能力使用 [ $a -eq $b ]

num1="你好"
num2="世界"
if [ $a == $b ]
then
    echo '相等!'
else
    echo '不相等!'
fi

# 或者 利用test结合||或&& (因为test结果本身不能直接输出 没有返回值 不像其它语言)
[ $a == $b ] && echo 相等  # 打印:相等

参考:
https://blog.csdn.net/qq_35078688/article/details/128413832
https://blog.csdn.net/u013713832/article/details/133755040
https://blog.csdn.net/oqqHuTu12345678/article/details/129257269

posted @   丁少华  阅读(20)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示