目录
使用最基本的Linux命令写成的Shell脚本往往在使用中会显得笨拙、不够灵活,它往往不能根据服务器实际情况自我做出判断,这个时候我们就可以用条件判断与if语句等方式来帮助我们。
一、条件测试
(1)文件测试与整数测试
①文件测试
要使shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同情况以确定执行何种操作。
测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其他数值 。
格式:
test 条件表达式
或 [ 条件表达式 ] (条件表达式的两边都需要有空格,且此方法更为常用
常见的测试操作符 | 含义 |
---|---|
-d | 测试是否为目录(directory) |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(eXcute) |
-L | 测试是否为软连接文件 |
-nt | 判断文件A是否比文件B新 |
-ot | 判断文件A是否比文件B旧 |
-et | 判断两个文件是否为同一文件 |
②整数测试
②整数测试
格式:
[ 整数1 操作符 整数2 ]
常见测试操作符:
操作符 | 含义 |
---|---|
-eq | 等于(Equal) |
-ne | 不等于(Not Equal) |
-lt | 小于(Leser Than) |
-gt | 大于(Greater Than) |
-le | 小于或等于(Lesser or Equal) |
-ge | 大于或等于(Greater or Equal) |
(3)字符串测试与逻辑测试
①字符串测试
格式:
[ 字符串1 = 字符串2 ] #判断是否相等
[ 字符串1 != 字符串2 ] #判断是否不等
[ -z 字符串 ] #判断字符串内容是否为空
操作符 | 含义 |
---|---|
= | 字符串内容相同 |
!= | 字符串内容不同,!号表示相反的意思 |
-z | 字符串内容为空 |
②逻辑测试
格式:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
二、if语句
(1)单分支机构
单分支if语句:对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。
if [ 条件判断式 ]:then
当条件判断成立时,执行命令
if
(2)双分支结构
if [ 条件判断式 ]; then
当条件判断成立时,可以执行一条或多条命令
else
当条件判断不成立时,可以执行一条或多条命令
fi
(3)多分支结构
if [ 条件判断式 ]; then
当条件判断成立时,可以执行一条或多条命令
elif [ 条件判断式二 ]; then
当条件判断成立时,可以执行一条或多条命令
else
当上面的条件判断都不成立时,可以执行一条或多条命令
fi
三、case语句
(1)case语句的结构
格式:
case 变量名称 in
模式1)
命令序列
;;
模式2)
程序段
;;
*)
不包含第一个变量内容与第二个变量内容的其他程序执行段
默认程序段
;;
esa
(2)case语句的注意事项
- case行首必须为单词“in”,每一模式必须以单个右括号")"结束
- 双分号";;"表示命令序列的结束
- 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]",还可以用竖杠符号 “|”表示或,如“A|B”。
- 最后的*)表示默认模式,其中的*相当于通配符
总结
- 条件测试的语法 (文件测试、整数测试、字符串测试、逻辑测试)
- if条件语句的语法 (单分支、双分支、多分支)
- case多分支语法