Shell脚本应用
技能展示
学会常见的条件测试操作
学会使用if条件语言
简 介
在简单的shell脚本程序中,各条语句将先后顺序依次执行,从而实现批处理的
自动化过程。然而,单一的顺序结构使得脚本过于机械化,不够“智能”,难以处
理更加灵活的系统任务。
本环节将学习如何进行条件测试,并通过正确使用if语句,使Shell脚本具有一定
的"判断"能力,以根据不同的条件来完成不同的管理任务。
重 点
整数值比较,逻辑测试
if语句的结构及应用
理论讲解
条件测试操作:要使Shel脚本程序具备一定的"智能",面临的第一个问题就是如何区分不同的
情况以确定执行如何种操作。例如,当磁盘使用率超过95%时,发生告警信息;当备份目录不
存在时,能够自动创建;当源码编译程序时,若配置失败则不再继续安装等。
Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,
否则(非0值)表示失败或者异常。使用专门的测试工具——test命令,可以对特定条件进行测
试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)。
使用test测试命令时,包括以下两种形式。
—————————————————————————————————————————
test 条件表达式
或
[ 条件表达式 ]
__________________________________________________________________________
这两种方式的作用完全相同,但通常后一种形式更为常用,也更贴近编程习惯。需要注意的
是,方括号 “[ 或 ]” 与条件表达式之间需要至少一个空格进行分隔。
根据需要测试的条件类别不同,条件表达式也不同。比较常用的条件操作包括文件测试,整数
值比较,字符串比较,以及针对多个条件的逻辑测试,下面分别进行介绍。
文件测试
文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读,
可写,可执行等。文件测试的常见操作选项如下,使用时将测试对象放在操作选项之后即可。
~ -d:测试是否为目录(Directory)。
~ -e:测试目录或文件是否存在(Exist)。
~ -f:测试是否为文件(File)。
~ -r:测试当前用户是否有权限读取(Read)。
~ -w:测试当前用户是否有权限写入(Write)。
~ -x:测试是否设置有可执行(Excute)权限。
操 作
一.test条件测试的基本使用
1)盘/mnt是否是目录,是目录显示yes不是为空。
[root@Centos ~]# test -d /mnt/ && echo “yes”
2)判断对/mnt/目录是否有写入权限,有写入权限显示yes
[root@Centos ~]# [ -w /mnt ] && echo “yes”
3)判断是否有写入权限有显示为0
[root@Centos ~]# [ -w /mnt ]
[root@Centos ~]# echo $?
3.整数比较
1)常见的比较运算符
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于
-eq:等于
-ne:不等于
2)判断是否相等,相等显示yes
[root@Centos ~]# test 5 -eq 5 && echo “yes”
3)判断历史命令小于100显示yes
[root@Centos ~]# abc=history | wc -l
[root@Centos ~]# [ $abc -le 100 ] && echo “yes”
4.字符串比较
1)字符串比较的操作符
=:等于
!=:不等于
-Z:判断字符串是否为空
2)判断第一个字符串和第二个字符串是否一致,一致显示yes
[root@Centos ~]# test “aa” = “aa” && echo “yes”
3)判断系统是否是中文,是中文显示yes
[root@Centos ~]# [ $LANG = zh_CN.UTF-8 ] && echo “yes”
5.逻辑测试
1)逻辑测试操作符
&&:而且或者使用-a,两个结果必须全部为真
||:或者使用-0,两个结果匹配任意一个为真
!:否,取反不成立显示为真
2)使用而且进行判断
[root@Centos ~]# [ -d /etc/ ] && [ -d /mnt ] && echo “yes”
3)使用或比较判断
[root@Centos ~]# [ -d /etc ] || [ -f ./1.txt ] && echo “yes”
二.判断
1.if单分支
1)if单分支语法结构
If [ 条件 ]
then 执行命令序列
fi
2)单分支特点
满足条件执行命令序列
不满足条件退出
3)判断/media目录是否存在,存在显示yes
[root@Centos ~]# vim test_directory.sh
4)media目录不存在创建
[root@Centos ~]# vim mkdir_media
2.双分支if判断
1)双分支语法结构
If [ 条件 ]
then
命令序列
else命令序列
fi
2)判断/test目录是否存在,存在显示yes不存在创建目录
[root@Centos ~]# vim test.sh
[root@Centos ~]# cat test.sh
3.if多分枝
1)if多分枝语法结构
If [ 条件 ]
then命令序列1
elif [ 条件2 ]
then
命令序列2
else命令序列3
fi
2)判断学生查询的成绩
[root@Centos ~]# vim test01.sh
[root@Centos ~]# cat test01.sh