shell编程之三(退出状态,比较运算符,文件判断符,条件判断结构-类似if判断,正则匹配 =~)

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) ]]
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/508.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2023/8/30作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录