Shell的if、case分支语句

本章结构

  • 条件测试
    文件测试与整数测试
    字符串测与逻辑测试
  • if语句
    if单分支语句
    if双分支语句
    if多分支语句
  • case分支语句
条件测试操作
  • test命令
    测试表达式是否成立,若成立返回0,否则返回其他数值
    格式1:test 条件表达式
    格式2:[ 条件表达式 ] 注 :至少要有一个空格
  • 文件测试
    [ 操作符 文件或目录 ]
  • 常用的测试操作符
[root@localhost~]#[ -d /media/cdrom ]
[root@localhost~]#echo $?
0                返回0表示条件成立
[root@localhost~]#[ -d /media/cdrom/Server ]
[root@localhost~]#echo $?
1                返回1表示条件不成立
[root@localhost~]#[ -d /media/cdrom ]&& echo "YES"
YES              &&表示而且的意思
  • 整数值比较
    [ 整数1 操作符 整数2 ]
  • 字符串比较
    格式1:
    [ 字符串1 == 字符2 ]
    [ 字符串1 != 字符2 ]
    格式2:
    [ -z 字符串 ]
    例:
[root@localhost ~]# test a == b
[root@localhost ~]# echo $?
1
[root@localhost ~]# test a != b
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ a == b ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ a != b ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ a == b ] && echo y || echo n 
n
[root@localhost ~]# [ a != b ] && echo y || echo n
y
[root@localhost ~]# 

&& :有“与”和“并且”的意思 ,当前面条件满足的时候,后面的才会执行
|| : 有“非”和“或”的意思, 当前面的条件不满足时候,后面的才会执行

[root@localhost ~]# [ a == b ];echo y    
y
[root@localhost ~]# [ a != b ];echo y
y                     其中 “;”作用:前后没有关系,不相互影响
[root@localhost ~]# a=wang
[root@localhost ~]# 
[root@localhost ~]# [ -z $a ] && echo y || echo n
n                   -z :检测字符段是否为控制
[root@localhost ~]# [ -n $a ] && echo y || echo n 
y                   -n :检测字符段是否为非空值
注:其中空格也属于空值 
整数值比较

整数值比较指的是根据给定的两个整数值,判断第一个数与第二 个数的关系, 如是否大于、等于、小于第二个数,实际应用非常广泛
例如用来判断已登录用户数量、开启进程数、磁盘使用率是否超标,以及软件版本号是否符合要求等
操作选项:
-eq: 第-一个数等于(Equal) 第二个数。
-ne: 第一一个数不等于(Not Equal) 第二个数。
-gt: 第一个数大于(Greater Than) 第二-个数。
-|t:第一一个数小于(Lesser Than)第二个数。
-le: 第-个数小于或等于(Lesser or Equal) 第二个数。
-ge: 第一一个数大于或等于(Greater or Equal) 第二个数
例:

[root@localhost ~]# [ 3 -eq 6 ] && echo y || echo n
n                                                  
[root@localhost ~]# [ 3 -eq 3 ] && echo y || echo n 
y
[root@localhost ~]# [ 3 -ne 3 ] && echo y || echo n 
n
[root@localhost ~]# [ 3 -lt 3 ] && echo y || echo n 
n
[root@localhost ~]# [ 3 -gt 3 ] && echo y || echo n 
n
[root@localhost ~]# [ 3 -ge 3 } && echo y || echo n 
-bash: [: 缺少 `]'
n
[root@localhost ~]# [ 3 -ge 3 ] && echo y || echo n 
y
[root@localhost ~]# [ 3 -le 3 ] && echo y || echo n 
y
[root@localhost ~]# [ $UID -le 3 ] && echo y || echo n 
y                     其中UID为0
文件测试

文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否存在,是否可读、可写、可执行等选项:
-d: 测试是否为目录(Directory)
-e: 测试目录或文件是否存在(Exist)
-f: 测试是否为文件(File)
-L: 测试是否为链接文件
-b:测试是否为设备文件
-c:测试是否为字符设备文件
-r:测试当前用户是否有权限读取(Read) 。
-w:测试当前用户是否有权限写入(Write)
-x: 测试是否设置有可执行(Excute) 权限
-s:测试存在且文件大小为空
例:

[root@localhost ~]# [ -d /etc/file ] && echo y || echo n 
n
[root@localhost ~]# [ -e /etc/file ] && echo y || echo n 
n
[root@localhost ~]# [ -e /etc/ ] && echo y || echo n 
y
[root@localhost ~]# [ -f /etc/ ] && echo y || echo n 
n
[root@localhost ~]# [ -d /xxx/ ] && echo y || echo n 
n
[root@localhost ~]# [ -r /etc/ ] && echo y || echo n 
y
[root@localhost ~]# [ -x /etc/ ] && echo y || echo n 
y
[root@localhost ~]# [ -w /etc/ ] && echo y || echo n 
y
[root@localhost ~]#  [ 3 -gt 2 -a 3 -gt 1 ] && echo y || echo n
y                    其中-a  是且 
[root@localhost ~]#  [ 3 -gt 2 -o 3 -gt 1 ] && echo y || echo n
y                    其中-o  是或
[root@localhost ~]# [ 3 -lt 2 ] || [ 3 -gt 1 ] && echo y || echo n
y                
[root@localhost ~]# [[ 3 -lt 2 || 3 -gt 1 ]] && echo y || echo n
y                          当|| 放在前面的时候表示或的意思,只需要满足一个条件就可以输出
[root@localhost ~]# [[ 3 -lt 2 && 3 -gt 1 ]] && echo y || echo n
n                          当&& 放在前面的时候表示且的意思,需要同时满足两个条件

  • 逻辑测试
    格式1: [ 表达式1 ] 操作符 [ 表达式2 ] …
    格式2 : 命令1 操作符 命令2 .。
  • 常用的测试操作符
    -a或&& :逻辑与, “而且”的意思
    -o或|| :逻辑或,“或者”的意思
    !;逻辑否
if语句的结构
  • 单分支结构
    if 条件测试操作
    then 命令序列
    fi 结束

if 已用磁盘空间> 80%
then 报警
fi
在这里插入图片描述
例:
编辑vim
在这里插入图片描述
检测shell脚本是否成立
在这里插入图片描述

  • 双分支结构
if  条件测试操作
   then  命令序列1
   else  命令序列2
fi

if  80端口是否监听
   then  网站服务已在运行
   else  启动http服务
fi

在这里插入图片描述

  • 多分支结构
if  条件测试操作1
   then  命令序列1
elif  条件测试2
   then  命令序列2
else
    命令序列3
fi
例:
if   分数为85~100之间
   then  判为优秀
elif  分数为70~84之间
   then  判为合格
esle
   判为不合格
fi
case语句结构

在这里插入图片描述

  • case多分支结构
case  变量值 in
模式1)
   命令序列1
   ;;
模式2)
   命令序列2
   ;;
   ......
*)
   默认命令序列
esac
例:
case  分数  in
85~100)
   判为优秀
   ;;
70~84)
   判为合格
   ;;
   ......
*)
  判为不合格
esac
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值