文章目录
shell的退出状态
退出状态是一个整数型,取值范围是0~255 (注意:0表示成功,非0表示失败)
echo $?
0 # 表示运行成功
1 # 通用错误
2 # shell内建命令使用错误(Bash文档上有说明)
126 # 命令调用后,但是不能执行
127 # 未找到命令
128 # exit的参数错误
130 # 用Control-C来结束脚本
条件判断结构(介绍4种,推荐使用 [[ ... ]] 结构)
1:test 表达式
2:[ 表达式 ]
3:[[ 表达式 ]] #这种比[ 表达式 ] 更通用,比如, &&, ||, <和> 操作符能够正常存在于[[ ]]中, 但在[ ]中 会报错.
4:if,case,while语句联用,作为流程控制语句的判断条件
示例重点介绍第三种
a=1;b=2
[ "$a" > "$b" ] && echo "$a 大于 $b" || echo "$a 不大于 $b" #[] 这种结构中 > 是不生效的,只能换用 -gt表示大于
[ "$a" -gt "$b" ] && echo "$a 大于 $b" || echo "$a 不大于 $b" #
[[ "$a" > "$b" ]] && echo "$a 大于 $b" || echo "$a 不大于 $b" #[[]] 这种结构,通用性更高,可以使用>也可以使用-gt 表示大于
[[ "$a" -gt "$b" ]] && echo "$a 大于 $b" || echo "$a 不大于 $b" #
整数比较运算符
(不可用于字符串和其他运算比较)
[ num1 -eq num2 ] #等于
[ num1 -ge num2 ] #大于等于
[ num1 -gt num2 ] #大于
[ num1 -le num2 ] #小于等于
[ num1 -lt num2 ] #小于
[ "$num1" -ne num2 ] #不等于 若$num1变量的值 不等于 num2,结果为0($num1的值必须是整数)
[[ num1 = num2 ]] #
[[ num1 > num2 ]] #
[[ num1 < num2 ]] #
[[ num1 >= num2 ]] #
[[ num1 <= num2 ]] #
字符串运算符
(用于测试,字符串是否为空,两个字符串是否相等或则不等)
test string #字符串string是否不为空,不为空,测试结果为0
[[ string1 = string2 ]] #等于(相同),等于==
[[ string1 == string2 ]] #等于(相同),等于=
[[ string1 != string2 ]] #不等于(不相同),
[ "$string1" != string2 ] #变量string1的值与字符串string2不相同
[[ string1 < string2 ]] #小于,按照ASCII字符进行排序
[[ string1 > string2 ]] #大于,按照ASCII字符进行排序
[[ -z string1 ]] #字符串长度为0,建议将字符串用""引起来,如[[ -z "string1" ]]
[[ -n string1 ]] #字符串长度不为0,
文件操作符(注意格式 前后留空格)
(这里的file可以是文件名,路径名,目录名)
若是符合条件判断,则返回0,否则返回非0
[ -b file ] #file是块设备(软盘,光驱,磁盘等)
[ -c file ] #file是字符设备(键盘, 鼠标, 声卡等)
[ -d file ] #file是目录
[ -e file ] #存在file文件
[ -f file ] #file是为普通文件
[ -r file ] #file是进程可读文件(运行脚本的用户是否对该文件有读取权限)
[ -w file ] #file是进程可写文件(运行脚本的用户是否对该文件有写入权限)
[ -x file ] #file是进程可执行文件(运行脚本的用户是否对该文件有执行权限)
[ -s file ] #file文件|目录大小不为0
[ -h file ] #file是符号链接
[ -L file ] #file是符号链接
[ -S file ] #file是socket文件
[ -O file ] #(指运行脚本的用户)是file文件的拥有者
[ -G file ] #file的group-id与运行脚本的用户group-id相同
[[ -O file ]] && echo "你是file的所有者" || echo "你不是file的所有者"
上面的条件判断都可以引入! 非来判断
[ ! -f file ] #若file不是一个普通文件,则返回0
逻辑运算符
(用于测试多个条件是否为真或为假,或使用逻辑非测试单个表达式)
[ ! expression ] #逻辑非,如果expression表达式为假,那么测试结果为真0
[ expression1 -a expression2 ] #逻辑与,若两个表达式同时为真,那么测试结果为真0
[ expression1 -o expression2 ] #逻辑或,若两个表达式中有一个是真,那么测试结果为真0
[ ! -e /etc ] #使用逻辑非,测试/etc目录不存在,(当然结果为假)
[ 15 -eq 20 -a -d /etc ] #使用逻辑与,测试两个表达式15 -eq 20 与-d /etc (当然结果为假)
正则匹配 =~
=~ :用于将左边的 与 右边的进行正则匹配,示例如下
[[ "$choice_phase2" =~ (No|N|No|n|no) ]]
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论