Shell编程之条件语句

本文详细介绍了Shell编程中的条件语句,包括test命令及其各种文件和数值测试,字符串比较,逻辑测试;深入讲解了if语句的单分支、双分支和多分支结构;最后探讨了case语句的结构和应用场景,帮助读者掌握Shell脚本中条件控制的使用。
摘要由CSDN通过智能技术生成

一、条件测试

1.test 命令

  • Shell 环境根据命令执行后的返回状态值 " $? " 来判断是否执行成功,当返回值为0时表示成功,否则表示失败或异常(非0值)。

  • 使用专门的测试工具 test 命令,可以对特定条件进行测试,并根据返回值(值为0)来判断是否成立。

test 命令格式如下所示

test 条件表达式
或
[ 条件表达式 ]                  #括号与表达式之间需要至少一个空格进行分隔
或
[[ 条件表达式 ]]

两种方式作用完全相同,但通常后者形式更为常用,也更贴近编辑习惯。

2. 文件测试

  • 文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行等。
  • 常用操作选项如下,使用时将测试对象放在操作选项之后即可

-d 测试是否为目录(Directory)

-e 测试目录或文件是否存在(Exist)

-f 测试是否为文件(File)

-r 测试当前用户是否有权限读取(Read)

-w 测试当前用户是否有权限写入(Write)

-x 测试当前用户是否有权限执行(Excute)

-b 测试是否为测试文件

-c 测试是否为字符设备文件

-s 测试存在且文件大小为空

-L 测试是否为链接文件

执行条件测试操作后,通过预定义变量 “$?” 可以获得测试命令的返回状态值,从而判断该条件是否成立

[root@localhost /home]#test -d /var/log/ && echo "是目录"
是目录                                                 #输出"是目录"表示是目录
[root@localhost /home]#test -e /var/log/ && echo "存在"
存在                                                   
[root@localhost /home]#echo $?                        #查看命令的返回值
0                                                     #返回0表示条件成立
[root@localhost /home]#[ -d /home/1.txt/ ]
[root@localhost /home]#echo $?
1                                                     #返回1表示不成立

执行下面的操作可以判断 /opt/目录下是否存在名为 1.txt 的文件,如果不存在就创建一个 1.txt 的文件

[root@localhost /home]#[ ! -e /opt/1.txt ] && echo "yes"        #“!”表示取反的意思
yes
[root@localhost /home]#ls /opt/
rh
[root@localhost /home]#[ ! -e /opt/1.txt ] && mkdir /opt/1.txt
[root@localhost /home]#ls /opt/
1.txt  rh

3. 整数值比较

  • 整数值比较是指根据给定的两个整数值来判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。

基本格式和常用选项如下:

[ 整数1 操作符 整数2 ]

-eq 第一个数等于(Equal)第二个数

-ne 第一个数不等于(Not Equal)第二个数

-gt 第一个数大于(Greater Than)第二个数

-lt 第一个数小于( Lesser Than)第二个数

-le 第一个数小于或等于(Lesser or Equal)第二个数

-ge 第一个数大于或等于(Greater or Equal)第二个数

案例

执行下面的操作可以判断当前的用户数量,当超过3个时输出 “用户过多 !”

[root@localhost /home]#who | wc -l
4
[root@localhost /home]#[ $(who | wc -l) -gt 3 ] && echo "用户过多!"
用户过多!

② 若要判断当前可用的空闲内存大小,当低于1800MB时输出具体数值,可以执行下面的操作

[root@localhost /home]#FreeCC=$(free -m |grep "Mem:" | awk '{print $6}')
[root@localhost /home]#echo $?
0
[root@localhost /home]#free -m
              total        used        free      shared  buff/cache   available
Mem:           3774         735        1347  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值