編寫一段 shell 程式完成:根據從鍵盤輸入的學生成績,顯示相應的成績标準,也可以同時輸入多個成績,最多為5 個,以空格分隔。
要求:
1.分出不及格、及格、中、良和優秀等.
2.要有對*.?分的識别能力.
3.如果是多個成績需要從高到低進行顯示.
4.所使用的shell 語句不限.
5.以程式行數最少為最佳.
代碼:
#!/bin/sh
#function:将學生成績進行分類,并将分類結果做一個從大到小的排列。
#學生分數可以是整數,浮點數,可以識别出*,&,$等特殊字元
check_num () {
var1=$(echo $1 | bc 2>/dev/null)
if [ "$var1" != "$1" ] #不是數字
then ret=5
elif [ `echo "$var1 < 0 || $var1 > 100" | bc 2>/dev/null` -eq 1 ] #數字超過範圍
then ret=0
elif [ `echo "$var1 < 60" | bc 2>/dev/null` -eq 1 ] #不及格
then ret=1
elif [ `echo "$var1 < 85" | bc 2>/dev/null` -eq 1 ] #及格
then ret=2
elif [ `echo "$var1 < 95" | bc 2>/dev/null` -eq 1 ] #優秀
then ret=3
else ret=4 #非常優秀
fi
return $ret
}
get_para() {
for var in $* #0:這種格式是為了便于排序
do {
case "$var" in
*\?*) echo "0: $var :含有?号。"
continue ;;
*\&*) echo "0: $var :含有&号。"
continue ;;
*\**) echo "0: $var :含有*号。"
continue ;;
*\$*) echo "0: $var :含有$号。"
continue ;;
esac
check_num $var
case "$?" in
"0") echo "0: $var: 該數字超過0-100範圍。";;
"1") echo "$var: 不及格。";;
"2") echo "$var: 及格。";;
"3") echo "$var: 優秀。";;
"4") echo "$var: 非常優秀。";;
"5") echo "0: $var :這不是數字。";;
*) echo "0: $var :??";;
esac
}
done
}
while true
do
{
echo "請輸入學生成績序列(-1退出):"
read nums
npara=$(echo "$nums" | wc -w)
if [ 5 -lt $npara ]
then echo "參數個數大于5!"
continue
fi
if [ "$nums" = "-1" ]
then echo "Goodbye."
break
fi
get_para "$nums" | sort -nr -t : -k 1,1
}
done
exit 0
結果抓圖: