Linux之shell脚本if case条件测试语句

一、条件测试

1.test命令

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

2.文件测试

常见的测试操作符 含义
-d 测试是否为目录(directory)
-e 测试目录或文件是否存在(Exist)
-f

测试是否为文件(File)

-r

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

-w 测试当前用户是否有权限写入(Write)
-x 测试当前用户是否有权限执行(eXcute)
-L 测试是否为软连接文件
-nt 判断文件A是否比文件B新
-ot 判断文件A是否比文件B旧
-ef 判断两个文件是否为同一个文件

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

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

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

3.整数值比较

格式:
[ 整数1 操作符 整数2 ]
操作符 含义
-eq 等于(Equal)
-ne 不等于(Not Equal)
-lt 小于(Leser Than)
-gt 大于(Greater Than)
-le 小于或等于(Lesser or Equal)
-ge 大于或等于(Greater or Equal)

示例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 字符串 ]                     #判断字符串内容是否为空
操作符 含义
= 字符串内容相同
!= 字符串内容不同,!号表示相反的意思
-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
-a或&& 逻辑与,而且的意思
-o或|| 逻辑或,或者的意思
逻辑否

二、if语句

1.单分支结构

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

如果只有一个判断式要进行,那么我们可以使用单分支的if语句 ,只有在条件成立时才会执行,否则不执行任何操作

Linux之shell脚本if case条件测试语句_第1张图片

 

示例: 使用单分支if语句判断test文件是否存在

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

2.双分支结构

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

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

Linux之shell脚本if case条件测试语句_第2张图片

 

示例: 判断用户输入的是否为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 		

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

Linux之shell脚本if case条件测试语句_第3张图片

 

[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多分支语句的语法

你可能感兴趣的:(linux,运维,服务器)