← 返回首页
Linux高级程序设计(十)
发表时间:2021-11-05 16:06:06
if/case控制语句

1.if语句

if 判断条件 ; then
  命令
fi

#或
if 判断条件
then
  命令
fi

实例:判断命令是否执行成功,成功则输出语句This is ok.

#!/bin/bash
ls /mnt > /dev/null
if [ $? -eq 0 ] ; then
    echo "This is ok."
fi

2.if-else语句

if 判断条件 ; then
  命令1
else
  命令2
fi

实例:判断考试是否通过。

#!/bin/bash
echo "please input score:"
read SCORE

if [ $SCORE -ge 60 ]; then
  echo "exam is pass!"
else
  echo "exam is fail!"
fi

3.多重if-else语句

if 判断条件1 ; then
  命令1
elif 判断条件2 ; then
  命令2
elif 判断条件3 ; then
  命令3
...
else
    命令n
fi

实例:判断键盘输入的数字,如果等于零则输出0,如果大于0则输出“这是一个正数”,如果小于0则输出“这是一个负数”。

#!/bin/bash
read -p "请输入一个数字:" num
if [ $num -eq 0 ] ; then
    echo $num
elif [ $num -gt 0 ] ; then
    echo "这是一个正数"
else
    echo "这是一个负数"
fi

4.case语句

case 变量或表达式 in
    变量或表达式1)
        命令1
        ;;
    变量或表达式2)
        命令2
        ;;
    ...
    *)
       默认命令
esac

实例:实现菜单功能。

#!/bin/bash
cat<<eof
***********
1.增加
2.删除
3.修改
4.查询
***********
eof
read -p "输入你的选择(数字):" num
case $num in
1)
    echo "增加"
    ;;
2)
    echo "删除"
    ;;
3)
    echo "修改"
    ;;
4)
    echo "查询"
    ;;
*)
    echo "输入的选择无效,请输入有效选择"
esac

注意:shell的case控制语句是不会出现case穿透现象。

#!/bin/bash
cat<<eof
***********
1.增加
2.删除
3.修改
4.查询
***********
eof
read -p "输入你的选择(数字):" num
case $num in
1)
    echo "增加"
    #期待出现case穿透
2)
    echo "删除"
    ;;
3)
    echo "修改"
    ;;
4)
    echo "查询"
    ;;
*)
    echo "输入的选择无效,请输入有效选择"
esac

实际运行时会报语法错误:

[root@iz2zefozq9h39txdb8s7npz shelldemo]# ./test.sh
***********
1.增加
2.删除
3.修改
4.查询
***********
输入你的选择(数字):1
./test.sh:行15: 未预期的符号 `)' 附近有语法错误
./test.sh:行15: `2)'

那么如果多个值输出同一个结果怎么办呢?

实例:判断输入的月份是大月还是小月。

#!/bin/bash
read -p "输入月份(1-12的数字):" month
case $month in
1 | 3 | 5 | 7 | 8 | 10 | 12)
    echo "大月"
    ;;
2 | 4 | 6 | 9 | 11)
    echo "小月"
    ;;
*)
    echo "输入的月份无效!"
esac