1. 条件测试
方法一:test (通常使用命令)
[root@localhost ~]# test -d /aaa
[root@localhost ~]# echo $?
1
方法二: [ ] (通常使用脚本环境下)
[root@localhost ~]# [ -d /mnt ]
[root@localhost ~]# echo $?
0
1.1 文件测试
选项:
- -d 测试是否为目录 directory
- -e 测试文件或目录是否存在 exist
- -f 测试是否是文件 file
- -r 是否有读写权限
- -w 是否有写入权限
- -x 是否有执行权限
利用$?查询是否存在,若为0,即存在;非0为不存在。
1.2整数值比较
选项:
- eq: 第一个数等于 (Equal) 第二个数。
- -ne: 第一个数不等于 (Not Equal) 第二个数。
- -gt: 第一个数大于 (Greater Than) 第二个数
- -lt: 第一个数小于 (Lesser Than) 第二个数。
- -le: 第一个数小于或等于 (Lesser or Equal) 第二个数
- -ge: 第一个数大于或等于 (Greater or Equal) 第二个数
1.3 字符串表示
选项:
- =: 第一个字符串与第二个字符串相同。
- !=:第一个字符串与第二个字符串不相同,其中“!”符号表示取反。
- -z: 检查字符串是否为空 (Zero),对于未定义或赋予空值的变量将视为空串。
1.4逻辑测试
- &&:逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值才为 0(结果成立)。使用 test 命令测试时,“&&”可改为“-a”。
- | |:逻辑或,表示“或者”,只要前后两个条件中有一个成立,整个测试命令的返回值即为 0(结果成立)。使用 test 命令测试时,“||”可改为“-o”。
- !: 逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为 0(结果成立)。
2. IF语句
2.1 单分支if语句
语法格式:
单分支if 语句的执行流程:
首先判断条件测试操作的结果,如果返回值为 0,表示条件成立,执行 then 命令序列,fi结束判断;如果返回值不为 0,则忽略 then 后面的命令序列,直接跳至 fi 执行其他脚本代码,如图 2.1 所示。
2.2双分支if 语句
语法格式:
双分支 if 语句的执行流程:
首先判断条件测试操作的结果,如果条件成立,则执行 then后面的命令序列 1,忽略 else 及后面的命令序列 2,直到遇见fi结束判断: 如果条件不成立则忽略 then 及后面的命令序列 1,直接跳至 else 后面的命令序列 2 并执行,直到遇见 fi 结束判断,如图 2.2 所示。
2.3多分支if语句
语法格式:
多分支if 语句的执行流程:
首先判断条件测试操作 1 的结果,如果条件 1 成立,则执行命令序列 1,然后跳至fi 结束判断: 如果条件 1 不成立,则继续判断条件测试操作 2 的结果,如果条件 2 成立,则执行命令序列 2,然后跳至fi 结束判断......如果所有的条件都不满足,则执行 else 后面的命令序列 n,直到遇见f结束判断,如图 2.3 所示。
[root@localhost ~]# vim qqq.sh
#!/bin/bash
read -p "请输入成绩" GRADE
if [ $GRADE -ge 80 ] && [ $GRADE -le 100 ]
then
echo "成绩是${GRADE}分,优秀"
elif [ $GRADE -ge 60 ] && [ $GRADE -lt 80 ]
then
echo "成绩是${GRADE}分,合格"
elif [ $GRADE -ge 0 ] && [ $GRADE -lt 60 ]
then
echo "不合格"
else
echo "数字不正确"
fi
[root@localhost ~]# bash qqq.sh
请输入成绩54
不合格
[root@localhost ~]# bash qqq.sh
请输入成绩76
成绩是76分,合格
[root@localhost ~]# bash qqq.sh
请输入成绩98
成绩是98分,优秀
3. case语句
[root@localhost ~]# vim aaa.sh
#!/bin/bash
read -p "请输入字符:" key
case "$key" in
[A-Z])
echo "字母"
;;
[0-9])
echo "数字"
;;
*)
echo "错误信息"
esac
[root@localhost ~]# bash aaa.sh
请输入字符:R
字母
[root@localhost ~]# bash aaa.sh
请输入字符:6
数字