目录
前言
如何进行条件测试操作,并通过正确的条件语句,使Shell脚本具有一定的判断能力,以我们设置的不同条件来完成不同的管理任务。
一、条件测试
1.test命令
Shell环境中根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值是0时表示成功,否则(非0)表示失败。使用专门的测试工具-test命令。
格式:test 条件表达式
格式:[ 条件表达式 ]
格式:[[]]
2.文件测试
常用选项
-f | 测试是否为文件(File) |
-d | 测试是否为目录(Directory) |
-e | 测试目录或文件是否存在(Exist) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(Excute) |
-b | 测试是否为块设备 |
-c | 测试是否为字符设备文件 |
-s | 测试存在且文件大小为空 |
-L | 测试是否为软连接文件 |
3.整数值的比较
使用时将操作选项放在要比较的两个整数之间
常用的操作
-eq | 第一个数等于(Equal)第二个数 |
---|---|
-ne | 第一个数不等于(Not Equal)第二个数 |
-gt | 第一个数大于(Greater Than)第二个数 |
-lt | 第一个数小于(Lesser Than)第二个数 |
-ge | 第一个数大于或等于(Greater or Equal)第二个数 |
-le | 第一个数小于或等于(Lesser or Equal)第二个数 |
4.字符串的比较
字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的Shell脚本中,也可用来判断用户输入的位置参数是否符合要求。
格式1:[ 字符串1 = 字符串2 ];[ 字符串1 != 字符串2 ]
格式2:[ -z 字符串 ]
常用的测试操作符 | 解释 |
---|---|
= | 第一个字符串与第二个字符串内容相同 |
!= | 第一个字符串与第二个字符串内容不同,!号表示相反的意思 |
-z | 检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串 |
5.逻辑测试
判断两个或多个条件之间的依赖关系
当系统任务取决于多个不同的条件的时候,判断是根据这些条件同时成立还是只要其中一个成立等情况
格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...
格式2:命令1 操作符 命令2 ...
&&:逻辑与,表示"而且",只有当前后两个条件都成立时,整个测试命令的返回值―才为0(结果成立)。使用test命令测试时,“&&"可改为"-a"。
||:逻辑或,表示"或者",只要前后两个条件中有一个成立,整个测试命令的返回值即为0(结果成立)。使用test命令测试时,“||"可改为"-o"。
!:逻辑否,表示"不",只有当指定的条件不成立时,整个测试命令的返回值才为0(结果成立)。
二、if语句
1.单分支的if语句
if 条件测试操作
then
命令序列
fi
2.双分支的if语句
若条件不成立,则忽略then,跳至else后面的命令序列执行,直到fi结束
if 条件测试操作
then
命令序列1
else
命令序列2
fi
3.多分支的if语句
if 条件测试操作1
then
命令序列1
elif 条件测试操作2
then
命令序列2
else
命令序列3
fi
要求每个阶段学习结束后会有阶段测试,默写和测试不合格者会有相应惩罚
惩罚规则如下:
90-100 错题 抄 10
80-89 错题 抄 20
60-79 错题 抄 30
60以下 全抄 30
三、case语句
1.case语句的结构
case语句主要使用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句只是判断一个变量的不同取值。
2.case分支语句
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
......
*)
默认命令序列
esac
总结
使用[[]]、[] 或test命令可以执行条件测试操作
执行命令或程序后会返回一个状态值,若返回值为0,表示执行成功;若不为0,则表现执行失败或出现异常