• Shell编程条件语句(if、case)


    目录

    一、Shell条件语句

     1.条件表达式测试

     2.文件测试

     3.整数值比较

     4.字符串比较

     5.逻辑测试

    二、if 条件语句(串行执行)

    (1)单分支结构

    (2)双分支结构

    (3)多分支结构

    三、case语句(并行执行)


    一、Shell条件语句

            Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真 true)时表示成功,返回值为非0值(假 false)时表示失败或异常。

    (与java等编程语言判断返回值完全相反!)

    test 命令

    更多操作可使用 man test 查看

     1.条件表达式测试

    [ 条件表达式 ]

    1. [root@localhost1 ~]#[ 1 = 1 ]
    2. [root@localhost1 ~]#echo $?
    3. 0
    4. [root@localhost1 ~]#[ 1 > 10 ]
    5. [root@localhost1 ~]#echo $?
    6. 1

    2.文件测试

    [ 操作符 文件或目录 ]

    文件操作符含义
    -e查看文件或目录是否存在(exist)
    -d查看文件是否是一个目录(directory)
    -f查看文件是否是一个目录(file)
    -r查看文件或目录是否可读(read)
    -w查看文件或目录是否可写(write)
    -x查看文件或目录是否可执行(excute)
    -L查看文件或目录是否是软链接文件(link)
    1. //测试 /root 是否是一个目录
    2. [root@localhost1 ~]#test -d /root/
    3. [root@localhost1 ~]#echo $?
    4. 0 --是
    5. //测试 /root 是否是一个文件
    6. [root@localhost1 ~]#[ -f /root/ ]
    7. [root@localhost1 ~]#echo $?
    8. 1 --否

     3.整数值比较

    [ 整数或变量 操作符 整数或变量 ]

    数值操作符含义
    -eq等于(equal)
    -ne不等于(not equal)
    -lt小于(less then)
    -gt大于(greater then)
    -le小于等于(less and equal)
    -ge大于等于(greater and equal)
    1. [root@localhost1 ~]#a=10
    2. [root@localhost1 ~]#b=20
    3. //测试 $a 是否等于10
    4. [root@localhost1 ~]#test $a -eq 10
    5. [root@localhost1 ~]#echo $?
    6. 0
    7. //测试 $a 是否大于 $b
    8. [root@localhost1 ~]#test $a -gt $b
    9. [root@localhost1 ~]#echo $?
    10. 1

    4.字符串比较

    [字符串1 操作符 字符串2]

    字符串比较操作符含义
    =等于
    !=不等于
    -z判断字符串是否为空
    1. as[root@localhost1 ~]#echo $LANG
    2. zh_CN.UTF-8
    3. //判断 $LANG 是否为 us.en
    4. [root@localhost1 ~]#[ $LANG = "us.en" ]
    5. [root@localhost1 ~]#echo $?
    6. 1

    5.逻辑测试

    [ 表达式1 ] 操作符 [ 表达式2 ] 

    逻辑操作符含义
    &&且(逻辑与),两边表达式均为真才返回0,否则返回非0
    -a含义同上,使用方法为[ 表达式1 -a 表达式2 ] 
    ||或(逻辑或),两边表达式其一为真返回0,全否才返回非0
    -o含义同上,使用方法为[ 表达式1 -o 表达式2 ] 
    取反(逻辑否),真否结果返回值相反
    1. [root@localhost1 ~]#a=1
    2. [root@localhost1 ~]#b=1
    3. //逻辑与,两条命令均执行成功才返回0
    4. [root@localhost1 ~]#[ $a = 1 ] || [ $a = $b ]
    5. [root@localhost1 ~]#echo $?
    6. 0
    7. //逻辑或,其一为真则返回0
    8. [root@localhost1 ~]#[ $a > 1 ] || [ $a = $b ]
    9. [root@localhost1 ~]#echo $?
    10. 0

    特殊用法:&& 与 || 一起使用(逻辑与执行返回状态为否,则继续执行逻辑或后的命令)

    1. //创建文件1.txt
    2. [root@localhost1 data]#touch 1.txt
    3. [root@localhost1 data]#ls
    4. 1.txt
    5. //判断1.txt 是否是目录,逻辑与返回状态为否,继续执行逻辑或后的命令
    6. [root@localhost1 data]#[ -d 1.txt ] && echo "1.txt 是目录" || echo "1.txt 不是目录"
    7. 1.txt 不是目录

    二、if 条件语句(串行执行)

    (1)单分支结构

    if [ 条件表达式 ];than

       执行命令行 (当条件判断成立)

    fi

    1. //判断3是否大于2
    2. [root@localhost1 ~]#vim test1.sh
    3. #!/bin/bash
    4. if [ 3 -ge 2 ]; then
    5. echo "yes"
    6. fi
    7. [root@localhost1 ~]#bash test1.sh
    8. yes

    (2)双分支结构

    if [ 条件表达式 ];than

       执行命令行 (当条件判断成立)

    else

       执行命令行 (当条件判断不成立)

    fi

    1. //判断年龄满足大于等于18的购买成人票,不满足购买学生票
    2. [root@localhost1 ~]#vim test2.sh
    3. #!/bin/bash
    4. read -p "请输入您的年龄:" age
    5. if [ $age -ge 18 ];then
    6. echo "请购买成人票(80元)"
    7. else
    8. echo "请购买学生票(40元)"
    9. fi
    10. [root@localhost1 ~]#bash test2.sh
    11. 请输入您的年龄:20
    12. 请购买成人票(80元)
    13. [root@localhost1 ~]#bash test2.sh
    14. 请输入您的年龄:8
    15. 请购买学生票(40元)

    (3)多分支结构

    if [ 条件表达式1 ];than

       执行命令行 (当条件判断1成立)

    elif [ 条件表达式2 ];than                         -- 可以有多个elif 判断语句

       执行命令行 (当条件判断2成立)

    else

       执行命令行 (当条件判断都不成立)

    fi

    1. [root@localhost1 ~]#vim test2.sh
    2. #!/bin/bash
    3. read -p "请输入您的年龄:" age
    4. if [ $age -ge 60 ];then
    5. echo "请购买老人票(20元)"
    6. elif [ $age -gt 18 ] && [ $age -lt 60 ];then
    7. echo "请购买成人票(80元)"
    8. elif [ $age -ge 6 ] && [ $age -lt 18 ];then
    9. echo "请购买学生票(40元)"
    10. else
    11. echo "请购买儿童票(20元)"
    12. fi
    13. [root@localhost1 ~]#bash test2.sh
    14. 请输入您的年龄:70
    15. 请购买老人票(20元)
    16. [root@localhost1 ~]#bash test2.sh
    17. 请输入您的年龄:23
    18. 请购买成人票(80元)
    19. [root@localhost1 ~]#bash test2.sh
    20. 请输入您的年龄:14
    21. 请购买学生票(40元)
    22. [root@localhost1 ~]#bash test2.sh
    23. 请输入您的年龄:3
    24. 请购买儿童票(20元)

    三、case语句(并行执行)

    case 变量名 in

    模式1)   -- 指定模式可以有多个(支持通配符)

      命令序列

      ;;

    模式2)

      命令序列

      ;;

    *)           -- 默认模式(除上述指定模式的其他情况)

      默认命令序列

      ;;

    esac

    1. [root@localhost1 ~]#vim test3.sh
    2. #!/bin/bash
    3. read -p "请输入你的分数(0~100):" num
    4. case $num in
    5. 100)
    6. echo "满分!"
    7. ;;
    8. 9[0-9])
    9. echo "优秀!"
    10. ;;
    11. [78][0-9])
    12. echo "良好!"
    13. ;;
    14. 6[0-9])
    15. echo "合格!"
    16. ;;
    17. [0-9]|[1-5][0-9])
    18. echo "不及格!"
    19. ;;
    20. *)
    21. echo "输入有误,请输入 0~100 的范围!"
    22. esac
    23. [root@localhost1 ~]#bash test3.sh
    24. 请输入你的分数(0~100):100
    25. 满分!
    26. [root@localhost1 ~]#bash test3.sh
    27. 请输入你的分数(0~100):97
    28. 优秀!
    29. [root@localhost1 ~]#bash test3.sh
    30. 请输入你的分数(0~100):78
    31. 良好!
    32. [root@localhost1 ~]#bash test3.sh
    33. 请输入你的分数(0~100):62
    34. 合格!
    35. [root@localhost1 ~]#bash test3.sh
    36. 请输入你的分数(0~100):45
    37. 不及格!
    38. [root@localhost1 ~]#bash test3.sh
    39. 请输入你的分数(0~100):123
    40. 输入有误,请输入 0~100 的范围!
  • 相关阅读:
    基于Springboot+vue的传统服装汉服销售购物商城 elementui
    springboot工程项目作为子项目放入根项目,只需启动根项目
    Java 线程的优先级
    在Gin框架中加入Zap日志中间件
    User parameters自定义用户参数 (zabbix监控)
    挂载硬盘相关操作-linux004
    vue 项目 前端 模拟后端接口数据(vue2,vue3)
    芯片的发展史和具体用途以及结构是什么样的
    Unity 拷贝文本
    JAVA助农电商商城平台毕业设计,JAVA助农销售网站系统设计与实现,毕设作品参考
  • 原文地址:https://blog.csdn.net/weixin_58544496/article/details/126497570