• shell脚本判断语句


    目录

    一. 判断语句

    1. 判断文件是否存在 test

    2. 数值比较

    3. 字符串比较

    4. 逻辑运算

    5. [ ] 与 [ [ ] ]

    6. ( ) 与 { } 

    7. if 语句

    二. 脚本应用


    一. 判断语句

    1. 判断文件是否存在 test

     选项 -a 和 -e 都可以判断文件是否存在

    只是 -a 选项在取反时有问题,建议都使用 -e

    test -e  /dev = [ -e /dev ]

    [ ] 不支持通配符和正则表达式

    [ [ ] ] 支持通配符和正则表达式

    补充:

    1. 操作符:
    2. -d:测试是否为目录(Directory)
    3. -e:测试目录或文件是否存在(Exist)
    4. -a:测试目录或文件是否存在(Exist)
    5. -f:测试是否为文件(File)
    6. -r:测试当前用户是否有权限读取(Read)
    7. -w:测试当前用户是否有权限写入(Write)
    8. -x:测试当前用户是否有权限执行(eXcute)
    9. -L: 测试是否为软连接文件
    10. 属性测试补充:
    11. -s FILE #是否存在且非空
    12. -t fd #fd 文件描述符是否在某终端已经打开
    13. -N FILE #文件自从上一次被读取之后是否被修改过
    14. -O FILE #当前有效用户是否为文件属主
    15. -G FILE #当前有效用户是否为文件属组

    2. 数值比较

    [ 整数1 操作符 整数2 ] 公式

    • -eq:第一个数等于(Equal)第二个数

    • -ne:第一个数不等于(Not Equal)第二个数

    • -gt:第一个数大于(Greater Than)第二个数

    • -lt:第一个数小于(Lesser Than)第二个数

    • -le:第一个数小于或等于(Lesser or Equal)第二个数

    • -ge:第一个数大于或等于(Greater or Equal)第二个数

    3. 字符串比较

    常用的测试操作符

    • =:字符串内容相同

    • !=:字符串内容不同,! 号表示相反的意思

    • -z:字符串内容为空

    • -n: 字符是否存在

    格式

    [ 字符串1 = 字符串2 ] 是否相同

    [ 字符串1 != 字符串2 ] 是否不相同

    [ -z 字符串 ] 是否为空

    [ -n 字符串 ] 字符是否存在

    4. 逻辑运算

    格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ... 格式2:命令1 操作符 命令2 ...

    常见条件

    • -a或&&:逻辑与,“而且”的意思全真才为真,一假即为假

    • -o或||:逻辑或,“或者”的意思一真即为真,全假才为假

    • !:逻辑否

    5. [ ] 与 [ [ ] ]

    [ ] 不支持通配符和正则表达式

    [ [ ] ] 支持通配符和正则表达式

    [ [ == str (通配符) ] ] 

    [ [ =~ str (正则表达式) ] ] 

    6. ( ) 与 { } 

    (CMD1;CMD2;...)可以将多个命令组合在一起,批量执行

      {空格CMD1;CMD2;...; }  可以将多个命令组合在一起,批量执行

    区别:

    7. if 语句

    单分支

    双分支

    多分支

    二. 脚本应用

    1. 判断磁盘使用率

    1. #!/bin/bash
    2. use=`df -h | grep boot | awk '{print $5}' | tr -d % `
    3. [ $use -gt 80 ] && echo "磁盘使用率过高" || echo "磁盘使用率正常"

    2. 监控磁盘使用率并邮箱告知

    1. #!/bin/bash
    2. use=$(df -h |grep "/dev/sd" |awk '{print $5}'|awk -F % '{print $1}')
    3. [ $use -gt 80 ]&& echo "磁盘使用量过高" | mail -s warning 111111111@qq.com ||echo "磁盘使用量正常"
    1. #!/bin/bash
    2. use=80
    3. disk=`df|grep "sd"|tr -s " "|cut -d " " -f5|cut -d "%" -f1`
    4. [ $disk -ge $use ] && echo "磁盘使用率过高"|mail -s test 111111111@qq.com

    3. 判断网络连通性

    1. #!/bin/bash
    2. ping -c 3 172.16.233.11
    3. if
    4. [ $? = 0 ]
    5. then
    6. echo "与真机网络通顺"
    7. fi
    8. echo "与真机网络不通"

    4. 判断服务是否开启

    1. #!/bin/bash
    2. ss -natp | grep 80
    3. if [ $? -eq 0 ]
    4. then
    5. echo "httpd服务正常开启"
    6. else
    7. systemctl start httpd &>/dev/null
    8. if [ $? -eq 0 ]
    9. then
    10. echo "httpd 服务已开启"
    11. else
    12. echo "httpd 服务启动失败"
    13. fi
    14. fi

    5. 判断是否为超级管理员

    1. #!/bin/bash
    2. if [ "$USER" != "root" ]
    3. then
    4. echo "非管理员用户无权限操作"
    5. else
    6. echo "是管理员用户"
    7. fi

    6. 判断分数

    1. #!/bin/bash
    2. read -p "请输入你的考试分数:" grade
    3. if [ $grade -ge 85 ]&& [ $grade -le 100 ]
    4. then
    5. echo "你的成绩为$grade"
    6. echo "你的成绩为优秀"
    7. elif [ $grade -ge 70 ]&&[ $grade -le 84 ]
    8. then
    9. echo "你的成绩为$grade"
    10. echo "你的成绩为良好"
    11. elif [ $grade -ge 60 ]&&[ $grade -le 69 ]
    12. then
    13. echo "你的成绩为$grade"
    14. echo "你的成绩为合格"
    15. else
    16. echo "你的成绩为$grade"
    17. echo "你的成绩不合格"
    18. fi
    1. #!/bin/bash
    2. read -p "请输入你的分数" score
    3. case $score in
    4. 100)
    5. echo "$score 你太优秀了"
    6. ;;
    7. [89][0-9])
    8. echo "$score 表现不错"
    9. ;;
    10. [67][0-9])
    11. echo "$score 你及格了"
    12. ;;
    13. [0-9]|[1-5][0-9])
    14. echo "$score 你不及格"
    15. ;;
    16. *)
    17. echo "输入有误"
    18. esac

    7. 判断时间

    1. #!/bin/bash
    2. h=`date +%H`
    3. if [ $h -ge 6 -a $h -le 10 ]
    4. then
    5. echo "早上好"
    6. elif [ $h -ge 11 -a $h -le 13 ]
    7. then
    8. echo "中午好"
    9. elif [ $h -ge 14 -a $h -le 18 ]
    10. then
    11. echo "下午好"
    12. else
    13. echo "晚上好"
    14. fi

    8. 判断yes或no

    1. read -p "Do you agree(yes/no)? " INPUT
    2. INPUT=`echo $INPUT | tr 'A-Z' 'a-z'`
    3. #转换大小写
    4. case $INPUT in
    5. y|yes)
    6.      echo "You input is YES"
    7. ;;
    8. n|no)
    9.      echo "You input is NO"
    10. ;;
    11. *)
    12.      echo "Input fales,please input yes or no!"
    13. esac
    1. read -p "Do you agree(yes/no)? " INPUT
    2. case $INPUT in
    3. [yY]|[Yy][Ee][Ss])
    4.    echo "You input is YES"
    5. ;;
    6. [Nn]|[Nn][Oo])
    7.    echo "You input is NO"
    8. ;;
    9. *)
    10.    echo "Input fales,please input yes or no!"                                  
    11.                              
    12. esac

    9. 包剪锤游戏

    1. #!/bin/bash
    2. m=`echo $[RANDOM%3+1]`
    3. read -p "请输入 1.石头2.剪刀3.布:" h
    4. if [ $m -eq $h ]
    5. then
    6. echo "打成平局"
    7. bash $0
    8. elif [ $h -eq 1 -a $m -eq 2 -o $h -eq 2 -a $m -eq 3 -o $h -eq 3 -a $m -eq 1 ]
    9. then
    10. echo "人类胜利"
    11. else
    12. echo "机器胜利"
    13. fi
    1. #!/bin/bash
    2. key=`echo $[RANDOM%3+1]`
    3. read -p "请输入1包子 2剪子 3 锤子:" num
    4. case $num in
    5. 1)
    6. num="包子"
    7. ;;
    8. 2)
    9. num="剪子"
    10. ;;
    11. 3)
    12. num="锤子"
    13. ;;
    14. *)
    15. echo "你输错了!"
    16. exit
    17. ;;
    18. esac
    19. case $key in
    20. 1)
    21. key="包子"
    22. ;;
    23. 2)
    24. key="剪子"
    25. ;;
    26. 3)
    27. key="锤子"
    28. ;;
    29. esac
    30. if [ $num = "包子" -a $key = "锤子" -o $num = "剪子" -a $key = "包子" -o $num = "锤子" -a $key = "剪子" ]
    31. then
    32. echo 机器出的是$key
    33. echo 你出的是$num
    34. echo "人类胜利"
    35. elif [ $num = $key ]
    36. then
    37. echo 机器出的是$key
    38. echo 你出的是$num
    39. echo "打成平局再来一次"
    40. else
    41. echo 机器出的是$key
    42. echo 你出的是$num
    43. echo "机器胜利"
    44. fi

    10. 跳板机

    1. #!/bin/bash
    2. web1="192.168.91.101"
    3. mysql="192.168.91.102"
    4. docker="192.168.91.103"
    5. #打印菜单
    6. cat <<EOF
    7. 1.web1
    8. 2.mysql
    9. 3.doker
    10. EOF
    11. read -p "请输入数字(1-3):" num
    12. case $num in
    13. 1)
    14. ssh $web1
    15. ;;
    16. 2)
    17. ssh $mysql
    18. ;;
    19. 3)
    20. ssh $doker
    21. ;;
    22. esac

  • 相关阅读:
    教你用HTML+CSS实现百叶窗动画效果
    Python期末复习题:流程控制
    华为设备配置攻击溯源命令
    USB——硬件控制器分类(OHCI UHCI EHCI xHCI)))
    获取用户真实 ip
    Asp .NetCore 从数据库加载配置(一)
    【LeetCode:108. 将有序数组转换为二叉搜索树 + 二叉树+递归】
    目标检测——【Transformer】Accelerating DETR Convergence via Semantic-Aligned Matching
    力扣 112. 路径总和
    快速排序算法
  • 原文地址:https://blog.csdn.net/qq_27349729/article/details/134524419