if条件语句实战:
- Linux Shell编程中,if、for、while、case等条件流程控制语句用的非常多,熟练掌握以上流程控制语句及语法的实验,对编写Shell脚本有非常大的益处。
1. test测试操作:
1.1. 常见的测试操作:
1.2.字符串比较:
操作符 |
含义 |
-z |
字符串的值为空 |
-n |
字符串的值不为空(相当于 ! -z) |
例:
[root@localhost ~]
YES
[root@localhost ~]
NO
[root@localhost ~]
YES
或者:
[root@localhost ~]
YES
或者:
[root@localhost ~]
YES
注意:[]这个括号代表test这条命令,操作符和操作值需空格隔开。
操作符 |
含义 |
== |
两个字符串相同 |
!= |
两个字符串不相同 |
例:
[root@localhost ~]
超级用户
[root@localhost ~]
/root
1.3. 整数值比较:
操作符 |
含义 |
-eq |
等于(equal) |
-ne |
不等于(not equal) |
-ge |
大于等于(greater or equal) |
-le |
小于等于(lesser or equal) |
-gt |
大于(greater than) |
-lt |
小于(lesser than) |
例:
[root@localhost ~]
3
[root@localhost ~]
NO
注意:$()和``意思是一样引用里面命令的值
1.4. 文件状态测试:
操作符 |
含义 |
-e |
判断对象是否存在(exist),若存在则结果为真 |
-d |
判断对象是否为目录(directory),是则为真 |
-f |
判断对象是否为一般文件(file)是则为真 |
-r |
判断对象是否有可读(read)权限,是则为真 |
-w |
判断对象是否有可写(write)权限,是则为真 |
-x |
判断对象是否有可执行(excute)权限,是则为真 |
-a |
双方都成立(and) |
-o |
单方成立(or) |
例:
[root@localhost ~]
/etc/passwd不是目录
[root@localhost ~]
-rw-r--r--. 1 root root 921 2月 14 04:06 /etc/passwd
[root@localhost ~]
/etc/passwd没有执行权限
[root@localhost ~]
YES
[root@localhost ~]
YES
2. if判断:单分支结构

2.1. if单分支执行流程:

2.2. 脚本应用示例:
if [ -d /etc/passwd -o -e /etc/passwd ];then
echo OK
fi
[root@localhost ~]
OK
3. if双分支结构:
- 当“条件成立”时执行命令序列1
- 否则,执行命令序列2

3.1. if双分支执行流程:

3.2. 脚本应用示例:
任务目标:
- 检测并判断指定主机是否可以ping通
- 目录主机地址以位置变量提供
#!/bin/bash
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 ~]
Host192.168.2.1 is up
4. if多分支结构:
语法格式及特点:
- 相当于if语句嵌套
- 针对多个条件分别执行不同的操作

4.1. if多分支执行流程:

4.2. 脚本应用示例:
任务目标:
- 输一个分数判断成绩分档
- 85-100优秀、70-84良好、69-60合格、60以下不合格
[root@localhost ~]
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 ~]
请输入分数(0-100):85
85分 优秀!!!
[root@localhost ~]
请输入分数(0-100):60
60分 合格!!!