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