【shell 脚本条件测试 if case条件测试语句】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、条件测试

1.test命令

格式:
test 条件表达式
或 [ 条件表达式 ]  (条件表达式的两边都需要有空格,且此方法更为常用)

2.文件测试

在这里插入图片描述

要使shell脚本程序具备一定的"智能",面临的第一个问题就是如何区分不同的情况以确定执行何种操作。

例如,当磁盘使用率超过95%时,发送告警信息;当备份目录不存在时,能够自动创建;当源码编译程序时,若配置失败则不再继续安装等

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。使用专门的测试工具—test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为 0表示条件成立)

3.整数值比较

格式:
[ 整数1 操作符 整数2 ]

在这里插入图片描述

示例1: :查询当前目录下的文件数是否大于10,如果大于,则进行提示。

[root@localhost ~]#ls |wc -l
15
[root@localhost ~]#test `ls |wc -l` -gt 10 && echo 文件数大于10
文件数大于10

示例2: 查看系统内存是否低于1024M,如果低于则提示。

[root@localhost ~]#free -m
              total        used        free      shared  buff/cache   available
Mem:           1758         359         790          17         608        1161
Swap:          3839           0        3839
[root@localhost ~]#free -m|grep "Mem"
Mem:           1758         359         791          17         608        1161
[root@localhost ~]#free -m|grep "Mem"|awk '{print $4}'
790
[root@localhost ~]#free=`free -m|grep "Mem"|awk '{print $4}'`
[root@localhost ~]#echo $free 
790
[root@localhost ~]#test `echo $free` -lt 1024 && echo 内存不足1024M
内存不足1024M
[root@localhost ~]#

4.字符串比较

格式:
[ 字符串1 = 字符串2 ] 			#判断是否相等
[ 字符串1= 字符串2 ] 			#判断是否不等
[ -z 字符串 ]                     #判断字符串内容是否为空

在这里插入图片描述
示例: 判断当前系统语言环境是否为“us.en”,如果不是则提示

[root@localhost ~]#echo $LANG
zh_CN.UTF-8
[root@localhost ~]#test `echo $LANG`="us.en"&&echo 当前系统语言不是us.en,当前系统语言为`echo $LANG`
当前系统语言不是us.en,当前系统语言为zh_CN.UTF-8
[root@localhost ~]#

5.逻辑测试

格式:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2

在这里插入图片描述

二、if语句

1.单分支结构

格式:
if [ 条件判断式 ]; than
	当条件判断成立时,执行一条或多条命令
fi 					

如果只有一个判断式要进行,那么我们可以使用单分支的if语句 ,只有在条件成立时才会执行,否则不执行任何操作
在这里插入图片描述
示例: 使用单分支if语句判断test文件是否存在

[root@localhost ~]#if test -e data; then echo 文件存在; fi
文件存在
[root@localhost ~]#

2.双分支结构

if [ 条件判断式 ]; then
	当条件判断成立时,可以执行一条或多条命令
else	
	当条件判断不成立时,可以执行一条或多条命令
fi 		

在同一个数据的判断中,如果该数据需要进行两种不同的判断,我们就需要双分支if语句了:

在这里插入图片描述
示例: 判断用户输入的是否为yes

[root@localhost ~]#vim reboot.sh 
 
#/bin/bash
read -p "请输入yes确定重启:" TEST
if [ $TEST = "yes" ]
   then
       echo 系统即将重启
else
   echo 没有输入yes,系统将不重启
fi

3.多分支结构

if [ 条件判断式 ]; then
	当条件判断成立时,可以执行一条或多条命令
elif [ 条件判断式二 ]; then
	当条件判断成立时,可以执行一条或多条命令
else	
	当上面的条件判断都不成立时,可以执行一条或多条命令
fi 		

如果数据需要进行多种不同的判断,则可以使用多分支结构 嵌套使用。

在这里插入图片描述

[root@localhost ~]#vim reboot1.sh 
 
read -p "请输入yes或no:" TEST
if [ $TEST = "yes" ]
   then
     echo 你输入的为$TEST!
   elif [ $TEST = "no" ]
      then
         echo 你输入的为$TEST!
else
   echo 你输入的${TEST}有错误,请重启输入yes或者no!  
fi

三、case语句

格式:
case 变量名称 in
模式1)
	命令序列
    ;;
模式2)
	程序段
	;;
*)
	不包含第一个变量内容与第二个变量内容的其他程序执行段
	默认程序段
	;;
esac

注意点:

case行首必须以单词“in”,每一模式必须以单个右括号")"结束

双分号";;"表示命令序列的结束

模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b

最后的)表示默认模式,其中的相当于通配符

示例:不管输出大小写字母,都能输出yes或者no

#!/bin/bash
read -p "请输入yes或者no:" i
case $i in  
[Yy]|[Yy][Ee][Ss])
echo "你输入的yes正确"
;;
[Nn]|[Nn][Oo])
echo "你输入的no正确"
;;
esac

总结

条件测试的语法

文件测试、整数值比较、字符串比较、逻辑测试

if条件语句的语法

单分支、双分支、多分支

case多分支语句的语法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值