• 【shell】条件语句


    一、测试

    1.1文件测试test

    test命令是内部命令

    1. test的语法
    2. test 条件表达式
    3. [ 条件表达式 ]
    4. test 选项 文件
    5. -d :判断是否是目录
    6. -f :判断是否是普通文件
    7. -b :判断是否是块设备
    8. -c :判断是否是字符设备
    9. -e :判断是否存在 ##建议不使用
    10. -e :判断是否存在 ##好用,建议使用
    11. -r :判断是否有读的权限 ##好用
    12. -w :判断是否有写的权限 ##好用
    13. -x :判断是否有执行的权限 ##好用

    test的用法  

    中括号的用法 

     注意-e和-a的区别,在于取反,建议使用-e即可

    总结:test主要用于判断文件是否存在,[]也有这样的用处,所以常还是使用[],test不常用 

    1.2整数值比较[]

    1. 整数的比较判断使用英文:
    2. -eq :表示等于
    3. -ne :表示不等于
    4. -gt :表示大于
    5. -ge :表示大于等于
    6. -lt :表示小于
    7. -le :表示小于等于

    案例一:判断boot分区的使用率是否够用 

    案例二:比较两个变量的大小

     

    1.3字符串比较

    1. = : 表示字符串相同
    2. = :表示字符串内容不相同
    3. -z :表示字符串内容为空
    4. -n :表示字符串存在
    5. 语法格式:
    6. [ 字符串1 = 字符串2 ] ##判断两个字符串是否相同
    7. [ 字符串1 != 字符串2 ] ##判断两个字符串是否不相同
    8. [ -z 字符串 ] ##判断字符串是否为空或是否存在,(存在且空也为不存在)

    案例一:判断变量是否有值 

    案例二:借助环境变量,判断用户是否存在 

    1.4逻辑测试(短路运算)

    1. 短路运算
    2. 与:&&(相当于电路串联)
    3. 格式1:[判断1] && [判断2]
    4. 格式2:命令1 && 命令2
    5. ##表示需要命令1和命令2都为真,才为真,真的意思是$?为0
    6. ##执行逻辑:如果命令1为真,继续执行命令2,如果命令1为假,没必要执行命令2
    7. 或:|| (相当于电路并联)
    8. 格式1:[判断1] || [判断2]
    9. 格式2:命令1 || 命令2
    10. ##表示需要命令1和命令2其中一个为真,就为真,真的意思是$?为0
    11. ##执行逻辑:如果命令1为真,没必要执行命令2;如果命令1为假,执行命令2

    合并用法:只需要记住一个

    命令1 && 命令2 ||命令3:特殊用法,表示判断命令1执行结果,正确执行命令2,错误执行命令3

    1. #!/bin/bash
    2. read -p "请输入想测试的ip地址:" ip
    3. ping -c 3 -W2 $ip &>/dev/null && echo "$ip is online" || echo "$ip is offline"

    -a或&&:逻辑与,表示而且的意思,全真为真

    -o或||:逻辑或,表示或,一真为真

    !:逻辑否

    在条件表达式中是可以相互转换的,但是命令序列,不能变换

    格式1:[判断1] && [判断2] (可以)
    格式2:命令1 && 命令2 (不可以)

    1. 下面哪些语法是错误的:
    2. [root@localhost opt]#[ $a -ne 12 ]&& [ $a -gt 5 ];echo $?
    3. [root@localhost opt]#[ $a -ne 12 -a $a -gt 5 ];echo $?
    4. [root@localhost opt]#[[ $a -ne 12 && $a -gt 5 ]];echo $?
    5. [root@localhost opt]#[ $a -ne 12 && $a -gt 5 ];echo $? ##错误,需要双中括号
    6. [root@localhost opt]#[ $a -ne 12 ] -a [ $a -gt 5 ];echo $? ##错误,不能这样使用

    产生随机数,测试运气

    1.5双中括号(支持正则表达式和通配符)

    1. [[ expression ]] 用法
    2. == 左侧字符串是否和右侧的PATTERN相同
    3. 注意:此表达式用于[[ ]]中,PATTERN为通配符
    4. =~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
    5. 注意: 此表达式用于[[ ]]中;扩展的正则表达式

    总结:注意使用的语法,可以理解为双中括号可以支持模糊匹配 

    [root@localhost opt]#script=ping.sh

    [root@localhost opt]#[[ $script == *.sh ]];echo $?(可以)
    [root@localhost opt]#[[ $script =~ sh$ ]];echo $?(可以)

    1.6小括号和花括号的区别

    总结:

    小括号类似于bash,在子bash中运行,不影响当前bash环境变量;

    花括号类似于source,在当前的bash环境运行,会影响当前bash的环境变量的值;且需要以分号结尾

    二、if语句的结构

    if条件语句的结构类型

    2.1单分支结构

    1. if [ 判断 ]
    2. then
    3. 命令序列
    4. fi

    2.2双分支结构

    1. if [ 判断 ]
    2. then
    3. 命令序列1
    4. else
    5. 命令序列2
    6. fi

    2.3多分支结构

    1. if [ 判断1 ]
    2. then
    3. 命令序列1
    4. elif [ 判断2 ]
    5. then
    6. 命令序列2
    7. elif [ 判断3 ]
    8. then
    9. 命令序列3
    10. .....(可以有多个)
    11. else
    12. 命令序列4
    13. fi

    实操1:判断是否为超级管理员

    实操2:根据分数反馈表现结果

     实操3:根据判断添加用户

      实操4:剪刀石头步小游戏

     实操5:判断几点,进行问好

     

    三、case语句的结构

    case的语法结构

    1. case 变量 in
    2. 条件1)
    3. 命令序列1
    4. ;;
    5. 条件2
    6. 命令序列2
    7. ;;
    8. .....(可以添加多个条件)
    9. esac ##这就是case的反过来的字母

     

     

  • 相关阅读:
    yolov5和yolov7之实例分割训练
    ELK之Logstash启动异常:Logstash could not be started because there is already...
    amazon鲲鹏系统有哪些功能
    有序Map集合:LinkedHashMap和TreeMap该如何选用
    spring cloud新版本使用loadbalancer替代Ribbon
    B31SE Image Processing
    (C++)线程同步——互斥对象
    JVM原理简介
    4.26日学习记录
    WPF依赖属性概述
  • 原文地址:https://blog.csdn.net/liu_xueyin/article/details/134532650