shell中的条件选择和判断语句

1、条件选择if语句

1.1、用法格式

if 判断条件1 ; then
  条件为真的分支代码
elif 判断条件2 ; then
  条件为真的分支代码
elif 判断条件3 ; then
  条件为真的分支代码
else
  以上条件都为假的分支代码
fi

逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句。

1.2、经典案例

1、判断年纪

#!/bin/bash
read -p "请输入你的年龄:" age
if [[ $age =~ [^0-9] ]];then
   echo "请输入整数!!!"
   exit 10
elif [ $age -ge 150 ];then
   echo "你输入的年龄超出范围,请输入正确的年龄!!!"
   exit 20
elif [ $age -ge 18 ];then
   echo "你的年龄大于18岁。"
else
   echo "你的年龄小于18岁。"
fi

分析:请输入年纪,先判断输入的是否含有除数字以外的字符,有,就报错;没有,继续判断是否小于150,是否大于等于18。

 

2、判断学生成绩

#!/bin/bash
#判断学生成绩是否及格
read -p "请输入你的成绩:" score
if [[ $score =~ [^0-9] ]];then
   echo "请输入一个整数!!!"
   exit 10
elif [ $score -gt 100 ];then
   echo "你输入的成绩超出总分范围,请重新输入!!!"
   exit 20
elif [ $score -ge 85 ];then
   echo "你的成绩非常好,请继续保持!!!"
elif [ $score -ge 70 ];then
   echo "你的成绩已经及格,请继续努力!!!"
else
   echo "你的成绩不及格,请继续努力!!!"
fi

分析:请输入成绩,先判断输入的是否含有除数字以外的字符,有,就报错;没有,继续判断是否大于100,是否大于85,是否大于70

2、条件判断 case

2.1case结构条件句语法

case $name in;
PART1)
  cmd
  ;;
PART2)
  cmd
  ;;
*)
  cmd
  ;;
esac

 

注意:case 支持glob 风格的通配符:

   * : 表示任意长度任意字符

  ? : 表示任意单个字符

  [] :指定范围内的任意单个字符

  a|b : a b

2.2case结构条件句范例

1:判断输入的是yes还是no

#!/bin/bash
read -p "请输入yes或no:"  anw
case "$anw" in
   [yY][eE][sS]|[yY])
    echo "输入的为:yes"
;;
   [nN][oO]|[nN])
    echo "输入的为:no"
;;
   *)
    echo "输入错误,请重新输入"
;;
esac

分析:请输入yes or no,回答Y/yyes各种大小写组合为yes;回答n/Nno等各种大小写组合为no