test
测试文本的表达式 是否成立
格式: test 条件表达式
格式: [ 条件表达式 ] ([] 内要空格 ,不然不生效)
如何测试?
[ 操作符 文件或目录 ]
echo $?
返回值是0 正确,返回值非0 不正确
操作符:
-d 测试是否为目录
-a 测试目录或文件是否存在
-e 测试目录或文件是否存在(推荐使用这个,-a有bug)
-f 测试是否是文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
-L 测试是否是软连接文件
比较整数数值
[整数1 操作符 整数2 ]
echo $?
0正确 非0 不正确
操作符
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
字符串比较
常用的测试操作符
= 字符串内容相同
!= 字符串内容不同,!表示相反的意思
-z 字符串内容是否存在
-n 字符是否存在
格式
[ 字符串1 操作符 字符串2 ]
echo $?
0正确 非0不正确
逻辑测试
常见条件
-a或&&: 逻辑与,"而且"的意思 两边条件为真才为真
-o或 | |:逻辑或,"或者"的意思 有一个条条件为真就为真
!:逻辑否
&& 与
a && b 同时满足a和b命令的要求,才会返回正确,有一方不满足,便是假
| | 或
a | | b 只要有一个结果为真,结果比为真。a结果为真,总结果肯定为真,
因此不需要执行b。a结果为假,b就需要进行判断,才能得到真正的结果
a && b | | c a如果为真,则执行b 就不会执行c a如果为假,就不会执行b,就需要执行c
双中括号
[ [ 表达式 条件 表达式 ] ]
条件 == 通配符
=~ 正则表达式
() {}
(a,b....) 和 {a,b....} 都可以将命令组合在一起,批量执行
()会开启子进程 {}不会开启子进程
if语句
分支结构
单分支
if 判断条件;
then
条件为真的分支代码
fi
双分支
if 判断条件;
then
条件为真的分支代码
else
条件为假的分支代码
fi
多分支
if 判断条件1;
then
条件1为真的分支代码
elif 判断条件2;
then
条件2为真的分支代码
elif 判断条件3;
then
条件3为真的分支代码
....
else
以上条件都不符合,则执行的代码
fi
case语句
格式:
read -p i
case $i in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
;;
easc
case支持glob风格的通配符:
* 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符
| 或者,如: a|b
echo
echo "abcdfg"
abcdfg
输出abcdfg
选项
-n 不换行输出
-e 表示输出转义符
" " 内的可用选项
\r | 光标移至行首,并且不换行 |
\s | 当前shell的名称,如bash |
\t | 插入Tab键,制表符 |
\n | 输出换行 |
\f | 换行,但光标仍停留在原处 |
\ | 表示插入"\"本身转义 |
\b | 表示退格 不显示前一个字符 |
\c | 抑制更多的输出或不换行 |