linux shell程序学生分等级用case选择区间表示

题目:
根据从键盘输入的学生成绩,显示相应的成绩标准(such as “failed”“passed”,”medium””good””excellent”)。

最简单的一种方法就是用if表示,但是有些复杂

!/bin/sh filename: example2.sh

# !/bin/sh filename: example2.sh
read -p "please input your achievement:" grass
echo $grass
if [ $grass -ge 90 ]
then
echo 'you are excellent'
elif [ $grass -ge 80 ]
then 
echo 'you are good'
elif [ $grass -ge 70 ]
then
echo 'you are medium'
elif [ $grass -ge 60 ]
then
echo 'you are passed'
else
echo 'you are failed'
fi

解法二,case区间
网上查阅的大部份资料是这样的。

case语句结构特点如下: case行尾必须为单词 in 每个模式必须以右括号 ) 结束 双分号 ;; 表示命令序列结束
case语句结构特点如下: 匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
最后的“)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“)”后的命令序列。

这个资料是正确的,但是不够全面,
我根据这个写出的代码是这样的:

!/bin/sh filename: example2.sh

read -p "please input your achievement:" grass
echo $grass
case $grass in
[0-59])echo  ?D?;;
[60-79])echo  ?C?;;
[80-89])echo  ?B?;;
[90-100])echo  ?A?;;
*)echo ?error?;;
esac

`运行结果:
在这里插入图片描述
再多反调试之后我发现

#!/bin/bash
read -p "press some key ,then press return :" KEY
case $KEY in
[0-9])
echo "It's a letter."
;;
*)
echo "It's function keys?Spacebar or other ksys."
esac

在这里插入图片描述
0-9是可以运行的,因为[ ]表示可以选中其中一个字符,而11是两位数
因此要使用 [ ][ ],中间不用使用连接词,
修改过后:

#!/bin/bash
read -p "press some key ,then press return :" KEY
case $KEY in
[0-9][0-9])
echo "It's a letter."
;;
*)
echo "It's function keys?Spacebar or other ksys."
esac

在这里插入图片描述

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页