三、shell脚本语言表达式与运算符

本文详细介绍了Shell脚本中的各种比较和逻辑运算符,包括条件表达式、整数比较符、字符串比较符、文件判断符、布尔和逻辑运算符。讲解了它们的使用方法和示例,特别提到了在不同表达式中如`[]`、`[[`和`()`的差异。还探讨了整数运算、`let`、`expr`和`bc`命令在数学运算中的应用。此外,文章总结了Shell中括号的各种用途,如用于运算、数组、匹配分组等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前一篇:二、shell脚本的字符串处理 

目录

1、条件表达式

2、整数比较符

3、字符串比较符 

 4、文件判断符

5、布尔运算符  

 6、逻辑判断符 

7、整数运算  

8、运算let/expr/bc

总结:

1、Shell 括号用途总结  


 

1、条件表达式

表达式示例
[ expression ][ 1 -eq 1 ]
[[ expression ]][[ 1 -eq 1 ]] 
test expression test 1 -eq 1 ,等同于[] 

2、整数比较符

比较符描述说明示例 
-eq,equal等于[ 1 -eq 1 ]为 true 
-ne,not equal不等于[ 1 -ne 1 ]为 false 
-gt,greater than大于[ 2 -gt 1 ]为 true 
-lt,lesser than小于[ 2 -lt 1 ]为 false 
-ge,greater or equal大于或等于[ 2 -ge 1 ]为 true 
-le,lesser or equal 小于或等于[ 2 -le 1 ]为 false 

注:整数的比较主要是使用在数字的表,或者是pid,$?的结果比较较多。 

3、字符串比较符 

运算符描述说明示例
==等于,相同[ "a" == "a"  ]为 true
!=不等于,不相同[ "a" != "a"  ]为 false 
>大于,判断字符串时根据 ASCII 码表顺序,不常

在[]表达式中:[ 2 \> 1 ]为 true

在[[]]表达式中:[[ 2 > 1 ]]为 true

在(())表达式中:(( 3 > 2 ))为 tru

小于,判断字符串时根据 ASCII 码表顺序,不常

在[]表达式中:[ 2 \< 1 ]为 false

在[[]]表达式中:[[ 2 < 1 ]]为 false

在(())表达式中:(( 3 < 2 ))为 false

>= 大于等于 在(())表达式中:(( 3 >= 2 ))为 true
<=小于等于在(())表达式中:(( 3 <= 2 ))为 false
-n字符串长度不等于 0 为真

VAR1=1;VAR2=""

[ -n "$VAR1" ]为 true

[ -n "$VAR2" ]为 false 

-z字符串长度等于 0 为真 

VAR1=1;VAR2=""

[ -z "$VAR1" ]为 false

[ -z "$VAR2" ]为 true

str字符串存在为真

VAR1=1;VAR2=""

[ $VAR1 ]为 true

[ $VAR2 ]为 false

注:字符串的比较符使用最多的是等于、不等于或者是是否字符串存在,其他的使用的很少。 

 需要注意的是,使用-z 或-n 判断字符串长度时,变量要加双引号 

[root@node mnt]$ cat test.sh 
#!/bin/bash
echo "直接引用"
[ -z $a ] && echo yes || echo no
[ -n $a ] && echo yes || echo no
echo "加了双引号才能正常判断是否为空"
[ -z "$a" ] && echo yes || echo no
[ -n "$a" ] && echo yes || echo no
echo "使用了双中括号就不用了双引号"
[[ -n $a ]] && echo yes || echo no
[[ -z $a ]] && echo yes || echo no
[root@node mnt]$ sh test.sh 
直接引用
yes
yes
加了双引号才能正常判断是否为空
yes
no
使用了双中括号就不用了双引号
no
yes

 4、文件判断符

判断符描述说明示例
-e文件或目录存在为真[ -e path ] path 存在为 true 
-f文件存在为真[ -f file_path ] 文件存在为 true
-d目录存在为真 [ -d dir_path ] 目录存在为 true 
-r有读权限为真[ -r file_path ] file_path 有读权限为 true 
-w 有写权限为真 [ -w file_path ] file_path 有写权限为 true
-x有执行权限为真[ -x file_path ] file_path 有执行权限为 true 
-s文件存在并且大小大于 0 为真[ -s file_path ] file_path 存在并且大小大于 0 为 true

文件的判断符很多在shell脚本都会使用到的。 

5、布尔运算符  

运算符描述描述说明示例
!非关系,条件结果取反[ ! 1 -eq 2 ]为 true 
-a和关系,在[]表达式中使用[ 1 -eq 1 -a 2 -eq 2 ]为 true
-o或关系,在[]表达式中使用  [ 1 -eq 1 -o 2 -eq 1 ]为 true

 6、逻辑判断符 

判断符 描述说明示例
&&逻辑和,在[[]]和(())表达式中 或判断表达式是否为真时使用

[[ 1 -eq 1 && 2 -eq 2 ]]为 true

(( 1 == 1 && 2 == 2 ))为 true

[ 1 -eq 1 ] && echo yes

如果&&前 面表达式为 true 则执行后面的

||逻辑或,在[[]]和(())表达式中 或判断表达式是否为真时使用 

[[ 1 -eq 1 || 2 -eq 1 ]]为 true

(( 1 == 1 || 2 == 2 ))为 true

[ 1 -eq 2 ] || echo yes

如果||前 面表达式为 false 则执行后面的

7、整数运算  

 

运算符描述说明
+加法 
-减法
*乘法
/除法 
%取余
运算表达式        示例 
$(())          $((1+1)) 
$[]            $[1+1] 

注:都不支持浮点运算

$(())表达式还有一个用途,三目运算: 
# 如果条件为真返回 1,否则返回 0 
# echo $((1<0))        
0 
# echo $((1>0)) 
1 
指定输出数字: 
# echo $((1>0?1:2))    
1 
# echo $((1<0?1:2)) 
2 
注意:返回值不支持字符串

8、运算let/expr/bc

除了 Shell 本身的算数运算表达式,还有几个命令支持复杂的算数运算

命令 描述说明示例
let赋值并运算,支持++、-

let VAR=(1+2)*3 ;

echo $VAR x=10 ;

y=5

let x++;echo $x 每执行一次 x 加 1

let y--;echo $y 每执行一次 y 减 1

let x+=2 每执行一次 x 加 2

let x-=2 每执行一次 x 减 2

expr乘法*需要加反斜杠转义\* 

expr 1 \* 2  运算符两边必须有空格

expr \( 1 + 2 \) \* 2  使用双括号时要转义 

bc计算器,支持浮点运算、 平方等 

bc 本身就是一个计算器,可直接输入命令,进入解释器。

echo 1 + 2 |bc 将管道符前面标准输出作为 bc 的标准输入

echo "1.2+2" |bc

echo "10^10" |bc  

echo 'scale=2;10/3' |bc  用 scale 保留两位小数点

 由于 Shell 不支持浮点数比较,可以借助 bc 来完成需求

# echo "1.2 < 2" |bc 
1 
# echo "1.2 > 2" |bc 
0 
# echo "1.2 == 2.2" |bc 
0 
# echo "1.2 != 2.2" |bc 
1 
看出规律了嘛?运算如果为真返回 1,否则返回 0,
写一个例子: 
# [ $(echo "2.2 > 2" |bc) -eq 1 ] && echo yes || echo no 
yes 
# [ $(echo "2.2 < 2" |bc) -eq 1 ] && echo yes || echo no 
no 

expr 还可以对字符串操作: 
# 获取字符串长度: 
 

# expr length "string" 
6 
截取字符串: 
# expr substr "string" 4 6 
ing 
获取字符在字符串中出现的位置: 
# expr index "string" str 
1 
# expr index "string" i 
4 
获取字符串开始字符出现的长度: 
# expr match "string" s.* 
6 
# expr match "string" str 
3

总结:

1、Shell 括号用途总结  

( )

用途 1:在运算中,先计算小括号里面的内容

用途 2:数组

用途 3:匹配分组

(( ))

用途 1:表达式,不支持-eq 这类的运算符。不支持-a 和-o,支持<=、>=、<、>这类 比较符和&&、||

用途 2:C 语言风格的 for(())表达式

$( )  执行 Shell 命令,与反撇号等效 
$(( ))     

用途 1:简单算数运算

用途 2:支持三目运算符 $(( 表达式?数字:数字 )) 

[ ]条件表达式,里面不支持逻辑判断符
[[ ]] 

条件表达式,里面不支持-a 和-o,不支持<=和>=比较符,支持-eq、<、>这类比较 符。

支持=~模式匹配,也可以不用双引号也不会影响原意,比[]更加通用 

$[ ]简单算数运算 
{ }

对逗号(,)和点点(...)起作用,

比如

touch {1,2}创建 1 和 2 文件,

touch {1..3}创建 1、2 和 3 文件

${ }

用途 1:引用变量

用途 2:字符串处理 

 注:以上就是shell中常使用到的一些运算符,判断符,比较符等的介绍了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiang0615csdn

你对鼓励是我最大的动力来源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值