条件测试
Shell 环境根据命令执行后的返回状态值 " $? " 来判断是否执行成功,当返回值为0时表示成功,否则表示失败或异常(非0值)。
使用专门的测试工具 test 命令,可以对特定条件进行测试,并根据返回值(值为0)来判断是否成立。
test 条件表达式
[ 条件表达式 ] #条件表达式的两边都需要有空格,没有空格会报错,且此方法更为常用
[[ 条件表达式 ]]
选项:
-a 文件是否存在(-a取反会有问题 建议使用 -e)
-e 文件是否存在
-f 判断是否是普通文件
-d 判断是否是目录文件
-r 判断当前用户对文件是否可读
-w 判断当前用户对文件是否可写
-x 判断当前用户对文件是否可执行
ps:[ ] 和 [[ ]] 区别 []不支持正则核通配符 [[]]支持
对于超级管理员所有权限 :除了x 其他不适受限
1. 其他人没有rw 超级管理员也有
2. 其他人没有x 超级管理员也没有,只要其他用户有x超级管理员也有
整数比较
通式: [ 整数1 操作符 整数2 ]
操作符:
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于等于
-ge 大于等于
字符串比较
格式:
[ 字符串1=字符串2 ]
[ 字符串1!=字符串2 ]
[ -z 字符串 ]
常用的测试操作符:
=:第一个字符串和第二个字符串相同
!=:第一个字符串与第二个字符串不相同,其中“!”符号表示取反
-z:字符串内容为空
逻辑测试
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同条件时,判断是根据这些条件同时成立还是只要有其中一个成立等情况,需要有一个测试过程。
格式:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
常用的测试操作符:
&&:逻辑与,表示而且,只有当两个条件都成立时,整个测试命令的返回值才为0(结果成立)。
使用Test命令测试时,“&&”可改为“-a”。
||:逻辑或,表示或者,只要前后两个条件有一个成立,整个测试命令的返回值即为0(结果成立)。
使用Test命令测试时,“||”可改为“-o”。
!:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为0(结果成立)。
短路与(且) : &&
全真才为真,一假即为假
cmd1 && cmd2
1. 第一个命令是假的 没有必要再执行命令2 应为肯定为假
2. 第一个命令是真的 我要执行命令2后才能判断是否为真
短路或(或者): ||
一真即为真,全假才为假
cmd1 || cmd2
1. 第一个命令是真的,不需要执行命令2,应为肯定为真
2. 第一个命令是假的,才会执行命令2后 判断整个式子是否为真
if:条件判断语句
单分支if语句
对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。
语法格式:
if 条件测试操作
then
命令序列
fi
双分支的if语句
对于双分支的选择结构,要求针对“条件成立”“条件不成立”两种情况分别执行不同的操作。
格式:
if 条件测试操作
then
命令序列1
else
命令序列2
fi
多分支的if语句
多分支结构能够根据多个互斥的条件分别执行不同的操作,实际上等同于嵌套使用的if语句。
case
case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写。
case 语句主要适用于以下情况: 某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个 不同的条件,而 case 语句只是判断一个变量的不同取值。
格式:
case 变量值 in
模式一)
命令序列
;;
模式二)
命令序列
;;
……
*)
默认命令序列
esac
case语句注意事项
- case行首必须为单词“in”,每一模式必须以单个右括号")"结束
- 双分号";;"表示命令序列的结束
- 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]",还可以用竖杠符号 “|”表示或,如“A|B”。
- 最后的*)表示默认模式,其中的*相当于通配符