目录
一、条件测试
Shell 环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为 0 时表示成功,否则(非 0 值)表示失败或异常。使用专门的测试工具——test 命令,可以对特 定条件进行测试,并根据返回值来判断条件是否成立(返回值为 0 表示条件成立)。
1.test命令
测试表达式是否成立,若成立返回0,否则返回其他数值
- 格式1: test 条件表达式
- 格式2: [ 条件表达式 ] 注意中括号和表达式中间需要隔一个空格
- 格式3:[[ 条件表达式 ]]
2.文件测试
文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行等。
[ 操作符 文件或目录 ]
3.常用的测试操作符
- -d:测试是否为目录(Directory)
- -e:测试目录或文件是否存在(Exist)
- -f:测试是否为文件(File)
- -r:测试当前用户是否有权限读取(Read)
- -w:测试当前用户是否有权限写入(Write)
- -x:测试当前用户是否有权限执行(eXcute)
- -b:测试是否为设备文件
- -c:测试是否为字符设备文件
- -s:测试存在且文件大小为空
- -L:测试是否为链接文件
执行条件测试操作以后,通过预定义变量$?可以获得测试命令的返回状态值,从而判断该条件是否成立。
4.判断的表达方式
- test
- [ ]
- [[ ]]
[ ] 和 [[ ]] 区别 []不支持正则核通配符 [[]]支持选项:
- -a 文件是否存在
- -e 文件是否存在
- -f 判断是否是普通文件
- -d 判断是否是目录文件
- -r 判断当前用户对文件是否可读
- -w 判断当前用户对文件是否可写
- -x 判断当前用户对文件是否可执行
通式:test 选项 测试的内容
没有空格会报错(错误示范)
建议脚本中使用 [ ] 来表示判断(补充)
-a -e 的区别 -a取反会有问题 建议使用 -e
[[ ]] 加强版的[ ] (补充)
- 正则表达式:过滤文件中的内容
- 通配符:去找文件名,无法处理文件中的内容
使用两个[ 要使用2个 == 右边使用通配符
=~ 右边可以使用正则表达式
正则当中:
- . 代表任意一个字符
- .* 任意字符
- \ 代表本来含义
5.整数比较
通式: [ 整数1 操作符 整数2 ]
操作符:
- -eq 等于
- -ne 不等于
- -lt 小于
- -gt 大于
- -le 小于等于
- -ge 大于等于
6.字符串比较
选项
- = 两个字符串是否 相同
- != 两个字符串是否不同
- -z 字符串是否为空
str="" 空字符 空格之间的区别
7. && 与 ||
短路与(且) : &&
全真才为真,一假即为假cmd1 && cmd2
- 第一个命令是假的 没有必要再执行命令2 应为肯定为假
- 第一个命令是真的 我要执行命令2后才能判断是否为真
短路或(或者): ||
一真即为真,全假才为假cmd1 || cmd2
- 第一个命令是真的,不需要执行命令2,应为肯定为真
- 第一个命令是假的,才会执行命令2后 判断整个式子是否为真
短路与 短路或使用 只有一种模式 就是 cmd1 && cmd2 || cmd3
二、if条件判断语句
1.单分支if [条件判断]thencmd1fi
2.双分支:if 条件判断[ ]thencmd1elsecmd2fi
3.多分支if 条件判断[ ]thencmd1elif 条件判断[ ]thencmd2elif 条件判断[ ]thencmd3.............................................................................elsecmd2fi
ping 脚本
判断当前用户是不是管理员
多分支 分数脚本