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判断:单分支结构

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

在这里插入图片描述

2.1. if单分支执行流程:

  • 流程示意图:

在这里插入图片描述

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

在这里插入图片描述

3.1. if双分支执行流程:

  • 流程示意图:

在这里插入图片描述

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语句嵌套
  • 针对多个条件分别执行不同的操作

在这里插入图片描述

4.1. if多分支执行流程:

  • 流程示意图:

在这里插入图片描述

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分 合格!!!
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值