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

it2025-07-24  9

题目: 根据从键盘输入的学生成绩,显示相应的成绩标准(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

最新回复(0)