shell的test条件测试和case语句

古城微笑少年丶 2023-10-05 13:49 166阅读 0赞

文章目录

    • Shell 编程——test、if和case语句
  • 一:条件测试
    • 1.1:文件测试与整数测试
      • 1.1.1:文件测试
        • 注意:
        • 常用的测试操作符
      • 1.1.2: 整数值比较
    • 1.2:字符串测试与逻辑测试
      • 1.2.1: 字符串的比较
      • 1.2.2: 逻辑测试
  • 二:if语句
    • 2.1:if单分支语句
    • 2.2:if 双分支语句
    • 2.3:if 多分支语句
  • 三:case 分支语句
    • 3.1:case 分支语句

Shell 编程——test、if和case语句

一:条件测试

1.1:文件测试与整数测试

1.1.1:文件测试

  • test 命令
  • 测试表达式是否成立,若成立返回0,否则返回其他数值.

    格式1: [test 条件表达式]

    格式2: [ 条件表达式 ]

注意:

格式2中表达式与中括号之间要有空格,否则语法错误.

  • 文件测试

    [ 操作符 文件或目录 ]

常用的测试操作符
  1. 常见的测试操作符 解释
  2. -d 测试是否为目录(directory
  3. -e 测试目录或文件是否存在(Exist
  4. -f 测试是否为文件(File
  5. -r 测试当前用户是否有权限读取(Read
  6. -w 测试当前用户是否有权限写入(Write
  7. -x 测试当前用户是否有权限执行(eXcute
  8. 注意: 测试文件推荐用绝对路径
  9. [root@shell ~]# touch abc.txt
  10. [root@shell ~]# test -f abc.txt
  11. [root@shell ~]# echo $?
  12. 0
  13. [root@shell ~]# test -d abc.txt
  14. [root@shell ~]# echo $?
  15. 1
  16. [root@shell ~]# [-d abc.txt]
  17. bash: [-d: 未找到命令...
  18. '注意中括号要有空格,要不然报错'
  19. [root@shell ~]# [ -d abc.txt ]
  20. [root@shell ~]# echo $?
  21. 1
  22. [root@shell ~]# [ -f abc.txt ]
  23. [root@shell ~]# echo $?
  24. 0
  25. [root@shell ~]# [ -d /dev/cdrom ]
  26. [root@shell ~]# echo $?
  27. 1
  28. [root@shell ~]# [ -f /dev/cdrom ]
  29. [root@shell ~]# echo $?
  30. 1
  31. [root@shell ~]# [ -e /dev/cdrom ]
  32. [root@shell ~]# echo $?
  33. 0
  34. [root@shell ~]# [ -e /dev/cdrom ]&& echo "yes"
  35. yes
  36. [root@shell ~]# [ -d /dev/cdrom ]&& echo "yes"
  37. [root@shell ~]# [ -f /dev/cdrom ]&& echo "yes"
  38. '注意&& 前面成立继续执行后面内容
  39. '&&前面不成立不执行后面的内容'

1.1.2: 整数值比较

  1. [ 整数1 操作符 整数2 ]
  • 操作符 解释
    -eq 等于(Equal)
    -ne 不等于(Not Equal)
    -gt 大于(Greater Than)
    -lt 小于(Lesser Than)
    -le 小于或等于(Lesser or Equal
    -ge 大于或等于(Greater or Equal)

    [root@shell ~]# [ 55 -gt 80 ] && echo “yes”
    [root@shell ~]# [ 80 = 80 ] && echo “yes”
    yes
    [root@shell ~]# [ 80 == 80 ] && echo “yes”
    yes
    [root@shell ~]#
    [root@shell ~]# [ ‘zhangsan’ == ‘zhangsan’ ] && echo yes
    yes
    [root@shell ~]# [ ‘zhangsan’ -eq ‘zhangsan’ ] && echo yes
    bash: [: zhangsan: 期待整数表达式
    [root@shell ~]# [ ‘zhangsan’ == ‘zhang’ ] && echo yes
    [root@shell ~]# [ ! ‘zhangsan’ == ‘zhang’ ] && echo ‘yes’

    [root@shell ~]# free -m

    1. total used free shared buff/cache available

    Mem: 3771 756 2219 57 794 2649
    Swap: 8191 0 8191
    [root@shell ~]# FreeCC=$(free -m |grep “Mem:”| awk ‘{print $6}’)
    [root@shell ~]# echo $FreeCC
    794
    [root@shell ~]# [ $FreeCC -lt 1024 ] && echo ${FreeCC} MB
    794 MB
    ‘注意这里不能用$( ),这表示括号里面是命令,不能是变量,${}里面可以是变量’
    ‘一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围,主要用来变量替换’

1.2:字符串测试与逻辑测试

1.2.1: 字符串的比较

  • 常用的格式

    格式一:[ 字符串1 = 字符串2 ]
    [ 字符串1 != 字符串2 ]

    格式二:[ -z 字符串 ]

1.2.2: 逻辑测试

  • 基本格式

    格式一: [ 表达式1 ] 操作符 [ 表达式2 ] …
    格式二: 命令1 操作符 命令2 …

    [root@shell ~]# [ -d /etc ] && [ -r /etc ] && echo “yes”
    yes
    [root@shell ~]# [ -d /etc ] -a [ -r /etc ] && echo “yes”
    -bash: [: 参数太多 ‘-a不是可选项’
    [root@shell ~]# [ 1 -eq 1 -a 2 -eq 2 ] && echo “yes”
    yes
    ‘-a和-o也可使用在[]中,更加方便’

1.2.3: 一元运算符,二元运算符和三元运算符

二:if语句

2.1:if单分支语句

  1. 单分支结构(基本格式)
  2. if 条件测试操作
  3. then 命令序列
  4. fi
  • exit 1 异常退出
  • exit 0 正常退出

‘单分支if语句’

  1. [root@shell ~]# vim test03.sh
  2. #!/bin/bash
  3. read -p "请输入目录位置" file
  4. if [ ! -d $file ];then
  5. mkdir -p $file
  6. echo "$file 已创建"
  7. fi

[root@shell ~]# sh test03.sh

2.2:if 双分支语句

  1. 双分支结构(基本格式)
  2. if 条件测试操作
  3. then 命令序列1
  4. else 命令序列2
  5. fi
  6. [root@shell ~]# vim test03.sh
  7. #!/bin/bash
  8. read -p "请输入目录位置:" file
  9. if [ -d $file ];then
  10. echo "目录已存在"
  11. else
  12. mkdir -p $file
  13. echo "$file已创建"
  14. fi

2.3:if 多分支语句

  • 多分支结构(基本格式)

    if 条件测试操作1
    then 命令序列1
    elif 条件测试操作2
    then 命令序列2
    else
    命令序列3
    fi

    [root@shell ~]# vim chengji02.sh

    !/bin/bash

    read -p “请输入成绩:” score
    if [ $score -lt 0 ] || [ $score -gt 100 ]
    then

    1. echo "输入有误"
    2. exit 1;

    elif [ $score -ge 85 ] && [ $score -le 100 ]
    then

    1. echo "成绩优秀"

    elif [ $score -ge 70 ] && [ $score -le 84 ]
    then

    1. echo "成绩合格"

    else
    [root@shell ~]# sh chengji02.sh
    请输入成绩:88
    成绩优秀
    [root@shell ~]# sh chengji02.sh
    请输入成绩:82
    成绩合格
    [root@shell ~]#
    [root@shell ~]# sh chengji02.sh
    请输入成绩:111
    输入有误

三:case 分支语句

3.1:case 分支语句

  • 格式:

    case 变量值 in
    模式1)

    1. 命令序列1
    2. ;;

    模式2)

    1. 命令序列2
    2. ;;
    3. ....

    *)

    1. 默认命令序列

    esac

    [root@shell ~]# vim hitkey.sh

    1 #!/bin/bash
    2 read -p “请输入一个字符,并按回车” key
    3 case “$key” in
    4 [a-z]|[A-Z])
    5 echo “您输入的是字母”
    6 ;;
    7 [0-9])
    8 echo “您输入的是数字”
    9 ;;
    10 *)
    11 echo “您输入的是空格,功能键和其他控制字符串”
    12 esac

发表评论

表情:
评论列表 (有 0 条评论,166人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Shell case esac语句

    case … esac 与其他语言中的 switch … case 语句类似,是一种多分枝选择结构。 case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令...