Shell 条件判断式语句
按文件类型判断
测试选项 | 作用 |
---|---|
-b 文件 | 判断该文件是否存在,并且是否为块设备文件 |
-c 文件 | 判断该文件是否存在,并且是否为字符设备文件 |
-d 文件 | 判断该文件是否存在,并且是否为目录文件 |
-e 文件 | 判断该文件是否存在(存在为真) |
-f 文件 | 判断该文件是否存在,并且是否为普通文件 |
-L 文件 | 判断该文件是否存在,并且是否为符号链接文件 |
-p 文件 | 判断该文件是否存在,并且是否为管道文件 |
-s 文件 | 判断该文件是否存在,并且是否为非空 |
-S 文件 | 判断该文件是否存在,并且是否为套接字文件 |
两种判断格式
test -e /root/install.log
[ -e /root/install.log ]
[ -e /root/install.log ] && echo yes || echo no
按文件权限判断
测试选项 | 作用 |
---|---|
-r 文件 | 判断该文件是否存在,并且是否该文件拥有读权限 |
-w 文件 | 判断该文件是否存在,并且是否该文件拥有写权限 |
-x 文件 | 判断该文件是否存在,并且是否该文件拥有执行权限 |
-u 文件 | 判断该文件是否存在,并且是否该文件拥有 SUID 权限 |
-g 文件 | 判断该文件是否存在,并且是否该文件拥有 SGID 权限 |
-k 文件 | 判断该文件是否存在,并且是否该文件拥有 SBit 权限 |
两个文件之间的比较
测试选项 | 作用 |
---|---|
文件1 -nt 文件2 | 判断文件 1 的修改时间是否比文件 2 的新 |
文件1 -ot 文件2 | 判断文件 1 的修改时间是否比文件 2 的旧 |
文件1 -ef 文件2 | 判断文件 1 是否和文件 2 的 Inode 号一致,可以理解为两个文件是否为同一个文件,这个判断用于硬链接判断是很好的方法 |
例子
1 | 创建一个硬链接 |
两个整数之间的比较
测试选项 | 作用 |
---|---|
整数1 -eq 整数2 | 判断整数 1 是否和整数 2 相等 |
整数1 -ne 整数2 | 判断整数 1 是否和整数 2 不相等 |
整数1 -gt 整数2 | 判断整数 1 是否大于整数 2 |
整数1 -lt 整数2 | 判断整数 1 是否小于整数 2 |
整数1 -ge 整数2 | 判断整数 1 是否大于等于整数 2 |
整数1 -le 整数2 | 判断整数 1 是否小于等于整数 2 |
例子
1 | [ 23 -ge 22 ] && echo "yes" || echo "no" |
字符串的判断
测试选项 | 作用 |
---|---|
-z | 判断字符串是否为空 |
-n | 判断字符串是否为非空 |
字符串1==字符串2 | 判断字符串 1 是否和字符串 2 相等 |
字符串1!=字符串2 | 判断字符串 1 是否和字符串 2 不相等 |
例子
1 | 给 name 变量赋值 |
多重条件判断
测试选项 | 作用 |
---|---|
判断1 -a 判断2 | 逻辑与,判断 1 和判断 2 都成立,最终的结果才为真 |
判断1 -o 判断2 | 逻辑或,判断 1 和判断 2 有一个成立,最终的结果就为真 |
! 判断 | 逻辑非,使原始的判断式取反 |
例子
1 | 给变量 aa 赋值 |
Shell 单分支if语句
概述
如何 “背” 程序
- 抄写目标程序并能正确运行
- 为目标程序补全注释
- 删掉注释,为代码重新加注释
- 删除代码,看注释写代码
- 删除注释和代码,从头开始写
单分支 if 语句
语法支持
1 | if [ 条件判断式 ];then |
例子1:判断登录的用户是否为 root
1 | !/bin/bash |
单分支 if 语句例子:判断分区使用率
1 | !/bin/bash |
Shell 双分支if语句
语法支持
1 | if [ 条件判断式 ] |
双分支 if 语句例子:判断输入的是否是一个目录
1 | !/bin/bash |
双分支 if 语句例子:判断Apache服务是否启动
1 | !/bin/bash |
Shell 多分支 if 语句
语言支持:
1 | if [ 条件判断式 1 ] |
多分支 if 语句例子:判断用户输入的是什么文件
1 | !/bin/bash |
Shell 多分支case语句
语法支持
1 | case $变量名 in |