目录
一、条件测试
1.1 测试命令---test
测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其它数值
格式:
test 条件表达式
或 [ 条件表达式 ] (条件表达式的两边都需要有空格,且此方法更为常用)
1.2 文件测试
根据给的路径名称,判断对应是文件=还是目录,或者判断是否有相应的权限等。
格式:[ 操作符 文件或目录 ]
常用的操作符 | 作用 |
---|---|
-d | 测试是否为目录(Directory) |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(Excute) |
1.3 整数值比较
用于比较两个整数值得大小
格式:[ 整数变量1 操作符 整数变量2 ]
常用的操作符 | 作用 | 符号 |
---|---|---|
-eq | 等于 | == |
-ne | 不等于 | != |
-gt | 大于 | > |
-lt | 小于 | < |
-le | 小于等于 | ≤ |
-ge | 大于等于 | ≥ |
1.4 字符串比较
- 字符串可用来查看用户输入、系统环境等是否满足条件
- 交互式操作的shell脚本中,用来判断用户输入的位置参数是否符合要求
常用选项 | 作用 |
---|---|
= | 第一个字符串与第二个字符串相同 |
!= | 第一个字符与第二个字符串不相同,“!”表示取反 |
-z | 字符串内容为空 |
格式1:
[ 字符串1 = 字符串2 ] 或 [ 字符串1 == 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2:
[ -z 字符串 ] #检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
1.5 逻辑测试
用于判断两个人或多个条件之间的依赖关系
常用的操作符:
-a或&& :逻辑与,“而且”的意思,前后条件需都成立
-o或|| :逻辑或,“或者”的意思,只需前后条件中一个成立
! :逻辑否,“不”的意思
格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2
示例:
a=5
[ $a -ne 1 ] && [ $a != 2 ] 等同于 [ $a -ne 1 -a $a != 2 ]
#、&&、||操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错
[[ $a -ne 1 && $a != 2 ]]
[ 2 -lt 3 ] && echo true || echo false
[ 2 -ge 3 ] && echo true || echo false
补充:
三元运算符 条件表达式?值1::值2
条件表达式 && 命令1 || 命令2
二、if语句
2.1 单分支结构
只有在条件成立的时候才会执行相应的操作,否则不执行。
格式:
if 条件测试操作
then
命令序列
fi
示例 : 当磁盘已用% 超过80%的时候,提示 “过载!”,没超过80%则 显示“正常”
2.2 双分支if语句
针对两种情况执行不同的操作
格式:
if 条件测试操作
then
命令序列 1
else
命令序列 2
fi
2.3 多分支if语句
针对if的特性,嵌套使用,进行多次判断。
格式:
if 条件测试操作 1
then
命令序列 1
elif 条件测试操作 2
then
命令序列 2
[else]
[命令序列 3]
fi
示例:根据考试的分数,决定你抄写的遍数。
三、case分支语句
3.1 case语句的结构
用于变量存在多重取值,对每种取值执行不同的命令。
与if相似
case 变量值 in
模式 1)
命令序列 1
;;
模式 2)
命令序列 2
;;
* )
默认命令序列
esac