linux shell程式學生分等級用case選擇區間表示

地球你好發表於2020-10-22

題目:
根據從鍵盤輸入的學生成績,顯示相應的成績標準(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

在這裡插入圖片描述

相關文章