Shell:算术运算符

时间:2021-06-28 17:57:32   收藏:0   阅读:0

expr命令

expr 是 evaluate expressions 的缩写,译为“表达式求值”。Shell expr 是一个功能强大,并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度、字符串比较、字符串匹配、字符串提取等

语法

计算语法

expr 算术运算符表达式

注意: 运算表达式

获取计算结果赋值给新变量语法

result=`expr 算术运算符表达式`

技术图片

算术运算符

算术运算符介绍

下表列出了常用的算术运算符,假定变量 a 为 1,变量 b 为 2:

运算符 说明 举例
+ 加法 expr $a + $b 结果为 3
- 减法 expr $a - $b 结果为 -1
* 乘法 expr $a \* $b 结果为 2
/ 除法 expr $b / $a 结果为 2
% 取余 expr $b % $a 结果为 0
= 赋值 a=$b 将把变量 b 的值赋给 a

四则运算中如果使用了(), 也需要转义 \( 1 + 1 \)

测试:

#!/bin/bash
a=1 b=2          # 声明变量a=1和b=2
echo "a=${a} b=${b}"
echo "a + b = `expr $a + $b`"
echo "a * b = `expr $a \* $b`"
echo "a - b = `expr $a - $b`"
echo "a * b = `expr $a \* $b`"
echo "b / a = `expr $b / $a`"
echo "b % a = `expr $b % $a`"

echo -n "a == b 结果为 "
if [ $a == $b ]       # 注意变量与符号之间都要有空格
then
        echo true
else
        echo false
fi

echo -n "a != b 结果为 "
if [ $a != $b ]        # 注意变量与符号之间都要有空格
then
        echo true
else
        echo false
fi

比较运算符

整数比较运算符

下表列出了常用的比较运算符,假定变量 a 为 1,变量 b 为 2:

运算符 说明 举例
-eq equals 检测两个数是否相等,相等返回 0, 否则返回1。 [ $a -eq $b ] 返回 1。
-ne not equals检测两个数是否不相等,不相等返回 0。 [ $a -ne $b ] 返回 0。
-gt greater than检测左边的数是否大于右边的,
是返回0, 否则1
[ $a -gt $b ] 返回 1。
-lt lower than检测左边的数是否小于右边的,
是返回0, 否则1
[ $a -lt $b ] 返回 0。
-ge greater equals检测左边的数是否大于等于右边的,
是返回0, 否则1
[ $a -ge $b ] 返回 1。
-le lower equals检测左边的数是否小于等于右边的,
是返回0, 否则1
[ $a -le $b ] 返回 0。
< 检测左边的数是否小于右边的,
是返回0, 否则1
(($a<$b)) 返回0
<= 检测左边的数是否小于等于右边的,
是返回0, 否则1
(($a<=$b)) 返回0
> 检测左边的数是否大于右边的,
是返回0, 否则1
(($a>$b)) 返回1
>= 检测左边的数是否大于等于右边的,
是返回0, 否则1
(($a>=$b)) 返回1

注意: 整数比较运算符只支持整数,不支持小数与字符串,除非字符串的值是整数数字。

每个命令都有返回值, 返回0代表成功, 返回1代表失败

字符串比较运算符

下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":

字符串比较可以使用 [[]][] 2种方式

运算符 说明 举例
== 或 = 相等。用于比较两个字符串或数字,相同则返回 0。可以使用= [ $a == $b ] 返回1
[ $a = $b ] 返回 1
[[ $a == $b ]] 返回1
[[ $a = $b ]] 返回1
!= 不相等。用于比较两个字符串或数字,不相同则返回 0。 [ $a != $b ] 返回 0
[[ $a != $b ]] 返回 0
< 小于, 用于比较两个字符串或数字, 小于返回0, 否则返回1 [ $a \< $b ] 返回 0
[[ $a < $b ]] 返回 0
> 大于, 用于比较两个字符串或数字, 大于返回0, 否则返回1 [ $a \> $b ] 返回 1
[[ $a > $b ]] 返回 1
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 1。
-n 检测字符串长度是否不为 0,不为 0 返回 true。 [ -n "$a" ] 返回 0。
$ 检测字符串是否不为空,不为空返回 0 ,否则返回1。 [ $a ] 返回 0。

字符串比较没有 <= 可以通过 [[ "a" < "b" && "a" = "b" ]]

[[]][] 的区别

1.[]会将含有空格字符串进行分拆分割后比较

技术图片

2.转义字符

[[]]< 不需要转义, 格式为 [[ 字符串1 < 字符串2 ]]

[] 需要对 <,>等 转义 , 格式为 [ 字符串1 \< 字符串2 ]

[] 执行效果:

技术图片

[[]]执行效果:

技术图片

逻辑运算符

运算符 说明 举例
&& 逻辑的 AND [[ 表达式1 && 表达式2 ]] 返回 false
|| 逻辑的 OR [[ 表达式1 || 表达式2 ]] 返回 true

注意: 使用&&|| 的运算符必须放在 [[]](())中才有效, 否则报错

-a-o 的运算符必须放在 [] 在才有效 或 test命令中

!可以用在[],[[]]中, 不可以在(())

文件测试运算符

文件测试运算符用于检测文件的各种属性。

属性检测描述如下:

操作符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file directory, 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file file, 检测文件是否是普通文件(既不是目录,也不是设备文件)
,如果是,则返回 true。
[ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,
则返回 true。
[ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file read,检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file write,检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file execute, 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file size, 检测文件是否为空(文件大小是否大于0)
,不为空返回 true。
[ -s $file ] 返回 true。
-e file exists, 检测文件(包括目录)是否存在,如果是,
则返回 true。
[ -e $file ] 返回 true。
file1 -nt file2 new than(nt), file1是否比file2新 [ file1 -nt file2 ]
file1 -ot file2 old than(ot), file1是否比file2旧 [ file1 -ot file2 ]

其他检查符:

语法

[ options 文件路径字符串]

[[ options 文件路径字符串 ]]

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!