Shell编程之条件语句
自动化运维必备之Shell脚本的条件语句,超详细讲解!
前言
1. test
作用:测试表达式是否成立,若成立返回0,否则返回其他数值。
格式:
格式1:test 条件表达式
格式2:[ 条件表达式 ] #注意中括号和表达式中间需要一个空格
或
[[ 条件格式 ]]
实例1:测试文件是否存在
实例2:测试是否为文件
总结:Shell 环境根据命令执行后的返回状态值 ($?) 来判断是否执行成功,当返回值为
0
时表示成功,否则非0值
表示失败或异常。使用专门的测试工具——test命令
,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)。
2. 文件测试
- 文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行等。文件测试的常见操作选项如下,使用时将测试对象放在操作选项之后即可。
选项 | 说明 |
---|---|
-d | 测试是否为目录(Directory) |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(eXcute) |
-b | 测试是否为设备文件 |
-c | 测试是否为字符设备文件 |
-s | 测试是否存在且文件大小为空 |
-L | 测试是否为软链接文件 |
-a:定义文件是否存在为真(与-e 用法类似)
实例:
执行条件测试操作以后,通过预定义变量
$?
可以获得测试命令的返回状态值,从而判断该条件是否成立。例如,执行以下操作可测试目录/media/
是否存在,如果返回值$?为 0, 表示存在此目录,否则表示不存在或者虽然存在但不是目录。
3. 数值比较
格式:[ 整数1 操作符 整数2 ]
- 整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。整数值比较的常用操作,选项如下,使用时将操作选项放在要比较的两个整数之间。
常用测试操作符 | 说明 |
---|---|
-eq | 等于(Equal) |
-ne | 不等于(Not Equal) |
-gt | 大于(Greater Than) |
-It | 小于(Lesser Than) |
-le | 小于或等于(Lesser orEqual)· |
-ge | 大于或等于(Greateror Equal) |
实例1:
实例2:
4.字符串比较
- 字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的Shell脚本中,也可用来判断用户输入的位置参数是否符合要求。字符串比较的常用操作选项如下。
字符串 | 说明 |
---|---|
= | 字符串内容相同 |
!= | 字符串内容不同,!号表示相反的意思 |
z | 字符串内容为空,对于未定义或赋予空值的变量将视为空串 |
实例1:
实例2:
5. 逻辑测试
格式:
格式1∶ [ 表达式1 ] 操作符 [ 表达式2 ]…
格式2∶ 命令1 操作符 命令2…
-
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程。
-
常用的逻辑测试操作如下,使用时放在不同的测试语句或命令之间。
-a或&&∶ 逻辑与,"而且"的意思
-o或||∶ 逻辑或,"或者"的意思
!∶逻辑否
实例:
6. if语句
6.1 单分支语句
格式:
if [ 条件判断式 ]; then
当条件判断成立时,可以进行的命令工作内容
fi #这里将if反过来写,结束if语句的意思
原理图:
实例:
6.2 双分支语句
格式:
if [ 条件判断式 ]; then
当条件判断成立时,可以进行的命令工作内容
else
当条件判断不成立时,可以进行的命令工作内容
fi
原理图:
实例:
6.3 多分支语句
格式:
if [ 条件判断式 ]; then
当条件判断成立时,可以进行的命令工作内容
elif [ 条件判断式二 ]; then
当条件判断成立时,可以进行的命令工作内容
else
当上面的条件判断都不成立时,可以进行的命令工作内容
fi
原理图:
实例:
7. case语句结构
格式:
case 变量名称 in
“第一个变量内容”
程序段
;;
“第二个变量内容”
程序段
;;
*)
不包含第一个变量内容与第二个变量内容的其他程序执行段
默认程序段
;;
esac
案例:设置一个简单的游戏规则