shell编程之if条件语句判断

if条件语句实战:

  • Linux Shell编程中,if、for、while、case等条件流程控制语句用的非常多,熟练掌握以上流程控制语句及语法的实验,对编写Shell脚本有非常大的益处。

1. test测试操作:

  • 语法:test 选项 操作
  • [ 选项 操作]

1.1. 常见的测试操作:

1.2.字符串比较:

  • [ 操作符 字符串 ]
操作符 含义
-z 字符串的值为空
-n 字符串的值不为空(相当于 ! -z)
例:
#判断""中的字符为空,为空输入YES不为空输入NO
[root@localhost ~]# [ -z "" ]&&echo YES || echo NO
YES
[root@localhost ~]# [ -z "1" ]&&echo YES || echo NO
NO
#判断""中的字符不为空输入YES,为空输入NO
[root@localhost ~]# [ ! -z "1" ]&&echo YES || echo NO
YES
或者:
[root@localhost ~]# [ -n "1" ]&&echo YES || echo NO
YES
或者:
[root@localhost ~]# test -n "1" &&echo YES || echo NO
YES

注意:[]这个括号代表test这条命令,操作符和操作值需空格隔开。
操作符 含义
== 两个字符串相同
!= 两个字符串不相同
例:
##判断当前shell终端登录的用户是root输出超级用户,不是就输出普通用户,其中$USER是环境变量
[root@localhost ~]# [ $USER == root ]&&echo "超级用户" ||echo "普通用户"
超级用户
##判断当前目录不是/就输入命令pwd否则输入/
[root@localhost ~]# [ $PWD != / ]&&pwd||echo "/"
/root

1.3. 整数值比较:

  • [ 整数值1 操作符 整数值2 ]
操作符 含义
-eq 等于(equal)
-ne 不等于(not equal)
-ge 大于等于(greater or equal)
-le 小于等于(lesser or equal)
-gt 大于(greater than)
-lt 小于(lesser than)
例:
##检查已登录的用户数,是否大于4,大于输入OK没有输出NO
[root@localhost ~]# who | wc -l
3
[root@localhost ~]# [ $(who | wc -l) -gt 4 ]&&echo OK||echo NO
NO
注意:$()和``意思是一样引用里面命令的值

1.4. 文件状态测试:

  • [ 操作符 文件或者目录 ]
操作符 含义
-e 判断对象是否存在(exist),若存在则结果为真
-d 判断对象是否为目录(directory),是则为真
-f 判断对象是否为一般文件(file)是则为真
-r 判断对象是否有可读(read)权限,是则为真
-w 判断对象是否有可写(write)权限,是则为真
-x 判断对象是否有可执行(excute)权限,是则为真
-a 双方都成立(and)
-o 单方成立(or)
例:
##判断/etc/passwd是目录输出"/etc/passwd是目录"否则输入"/etc/passwd不是目录"
[root@localhost ~]# [ -d /etc/passwd ] && echo "/etc/passwd是目录" || echo "/etc/passwd不是目录"
/etc/passwd不是目录
[root@localhost ~]# ll -d /etc/passwd
-rw-r--r--. 1 root root 921 2月  14 04:06 /etc/passwd
##判断/etc/passwd有没有执行权限,有输入:"/etc/passwd有执行权限",没有输入:"/etc/passwd没有执行权限"
[root@localhost ~]# [ -x /etc/passwd ] && echo "/etc/passwd有执行权限" ||echo "/etc/passwd没有执行权限"
/etc/passwd没有执行权限
##判断/etc/passwd是否是普通文件并且有读权限是输入YES,否则输入NO
[root@localhost ~]# [ -f /etc/passwd -a -r /etc/passwd ] && echo "YES" ||echo "NO"
YES
###判断/etc/passwd是否是目录或者有可读权限,满足其中一个输入YES,否则输入NO
[root@localhost ~]# [ -d /etc/passwd -o -r /etc/passwd ] && echo "YES" ||echo "NO"
YES

2. if判断:单分支结构

  • 当"条件成立"时执行命令序列
  • 否则不执行任何操作

shell编程之if条件语句判断_第1张图片

2.1. if单分支执行流程:

  • 流程示意图:

shell编程之if条件语句判断_第2张图片

2.2. 脚本应用示例:

#/bin/bash
#2020年7月22日15:04:48
#test 
#by author XiaoYU Er
############################################
##判断/etc/passwd是否是目录或者存在,满足其中一个输入OK
if [ -d /etc/passwd -o -e /etc/passwd ];then
echo OK
fi
[root@localhost ~]# sh test.sh 
OK

3. if双分支结构:

  • 当“条件成立”时执行命令序列1
  • 否则,执行命令序列2

shell编程之if条件语句判断_第3张图片

3.1. if双分支执行流程:

  • 流程示意图:

shell编程之if条件语句判断_第4张图片

3.2. 脚本应用示例:

任务目标:

  • 检测并判断指定主机是否可以ping通
  • 目录主机地址以位置变量提供
#!/bin/bash
#2020年7月22日15:37:26
#ping host
################################
ping -c 3 -i 0.2 -W 3 $1 &>/dev/null
if [ $? -eq 0 ];then
	echo "Host${1} is up"
else
	echo "Host${1} is down"
fi
[root@localhost ~]# sh ping_host.sh  192.168.2.1
Host192.168.2.1 is up

4. if多分支结构:

语法格式及特点:

  • 相当于if语句嵌套
  • 针对多个条件分别执行不同的操作

shell编程之if条件语句判断_第5张图片

4.1. if多分支执行流程:

  • 流程示意图:

shell编程之if条件语句判断_第6张图片

4.2. 脚本应用示例:

任务目标:

  • 输一个分数判断成绩分档
  • 85-100优秀、70-84良好、69-60合格、60以下不合格
[root@localhost ~]# vim gradediv.sh
#!/bin/bash
#2020年7月22日16:22:39
#gradediv
######################################
read -p "请输入分数(0-100):"   FS
if  [ $FS  -ge 85 ] && [ $FS -le 100 ];then
        echo "$FS分 优秀!!!"
elif [ $FS -ge 70 ] && [ $FS -le 84 ];then
        echo "$FS分 良好!!!"
elif [ $FS -ge 60 ] && [ $FS -le 69 ];then
        echo "$FS分 合格!!!"
else
        echo "$FS分 不合格!!!"
fi
[root@localhost ~]# sh gradediv.sh 
请输入分数(0-100):85
85分 优秀!!!
[root@localhost ~]# sh gradediv.sh 
请输入分数(0-100):60
60分 合格!!!

你可能感兴趣的