一.文本条件测试
1.测试语法格式
测试表达式是否成立,若成立返回0,否则返回其他数值。
方法一:test 条件表达式
方法二:[条件表达式]
-
操作符
-d:测试是否为目录(Directory) -e:测试目录或文件是否存在(Exist) -a:测试目录或文件是否存在(Exist) -f:测试是否为文件(File) -r:测试当前用户是否有权限读取(Read) -w:测试当前用户是否有权限写入(Write) -x:测试当前用户是否有权限执行(eXcute) -L: 测试是否为软连接文件
-
属性测试
-s FILE #是否存在且非空 -t fd #fd 文件描述符是否在某终端已经打开 -N FILE #文件自从上一次被读取之后是否被修改过 -O FILE #当前有效用户是否为文件属主 -G FILE #当前有效用户是否为文件属组
-
示例
[root@test1 ~]# test -d /etc/sysconfig [root@test1 ~]# echo $? 0 [root@test1 ~]# test -f /etc/sysconfig [root@test1 ~]# echo $? 1 [root@test1 ~]# [ -d /etc/sysconfig/ ] 注意前后空格 [root@test1 ~]# echo $? 0 [root@test1 ~]# [ -f /etc/sysconfig/ ] [root@test1 ~]# echo $? 1 [root@localhost ~]# test -e qiuhe.sh &&echo "yes" yes &&表示且的意思 前面的表达式成立才会输出yes [root@localhost ~]#ll /etc/shadow ---------- 1 root root 1549 10月 19 10:58 /etc/shadow [root@localhost ~]#[ -r /etc/shadow ] [root@localhost ~]#echo $? 0 #实际效果,不是表面显示,注意root权限 [root@localhost ~]#[ -x /etc/shadow ] [root@localhost ~]#echo $? 1 #root执行权限别人没有root也没有,别人有root也有 ###a 和 e 的区别 [root@localhost ~]#[ ! -e /etc/shadow ] [root@localhost ~]#echo $? 1 [root@localhost ~]#[ ! -a /etc/shadow ] [root@localhost ~]#echo $? 0 ##建议使用e选项
2.比较整数数值
[ 整数1 操作符 整数2 ] 公式
- -eq:第一个数等于(Equal)第二个数
- -ne:第一个数不等于(Not Equal)第二个数
- -gt:第一个数大于(Greater Than)第二个数
- -lt:第一个数小于(Lesser Than)第二个数
- -le:第一个数小于或等于(Lesser or Equal)第二个数
- -ge:第一个数大于或等于(Greater or Equal)第二个数
3.字符串比较
-
常用的测试操作符
- =:字符串内容相同 - !=:字符串内容不同,! 号表示相反的意思 - -z:字符串内容为空 - -n: 字符是否存在
-
格式
[ 字符串1 = 字符串2 ] 是否相同 [ 字符串1 != 字符串2 ] 是否不相同 [ -z 字符串 ] 是否为空 [ -n 字符串 ] 字符是否存在
4.逻辑测试(短路运算)
格式1:[ 表达式1 ] 操作符 [ 表达式2 ] …
格式2:命令1 操作符 命令2 …
常见条件
- -a或&&:逻辑与,“而且”的意思全真才为真
- -o或||:逻辑或,“或者”的意思一真即为真
- !:逻辑否
-
短路与&&
CMD1 短路与 CMD2 全真才为真 第一个CMD1结果为真 ,第二个CMD2必须要参与运算,才能得到最终的结果 第一个CMD1结果为假 ,总的结果必定为假,因此不需要执行CMD2
-
短路或||
CMD1 短路或 CMD2 一真即为真 第一个CMD1结果为真 (1),总的结果必定为1,因此不需要执行CMD2 第一个CMD1结果为假 (0),第二个CMD2 必须要参与运算,才能得到最终的结果
二.if语句
1.单分支结构
单分支
if 判断条件;
then 条件为真的分支代码
fi
2.双分支结构
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
3.多分支结构
多分支
if 判断条件1; then
条件1为真的分支代码
elif 判断条件2; then
条件2为真的分支代码
elif 判断条件3; then
条件3为真的分支代码
...
else
以上条件都为假的分支代码
fi
三.case语句
1.case多分支
case 变量 in
模式1)
命令序列1
;;
模式2)
序列序列2
;;
.......
*)
默认命令序列
esac