(原创)shell 编程:根据从键盘输入的学生成绩,显示相应的成绩标准,也可以同时输入多个成绩,最多为5 个,以空格分隔。
编写一段 shell 程序完成:根据从键盘输入的学生成绩,显示相应的成绩标准,也可以同时
输入多个成绩,最多为5 个,以空格分隔。
要求:
1) 分出不及格、及格、中、良和优秀等.
2) 要有对*.?分的识别能力.
3) 如果是多个成绩需要从高到低进行显示.
4) 所使用的shell 语句不限.
5) 以程序行数最少为最佳.
程序:
1 #!/bin/bash 2 3 #Function: 4 5 # No.4 of the second exercise 6 7 #History: 8 9 # 2013/03/19 zyy 10 11 echo "Please input scores, less than 5 socres:" 12 13 read -a score_arr 14 15 sorted_arr=($(printf '%s\n' "${score_arr[@]}"|sort -n -r)) 16 17 declare -i i 18 19 for (( i=0; $i<${#sorted_arr[@]}; i=$i+1 )) 20 21 do 22 23 case ${sorted_arr[i]} in 24 25 ?|?\.*|[1-5]?|[1-5]?\.*) 26 27 score_rank[i]="Failed!";; 28 29 6?|6?\.*) 30 31 score_rank[i]="Passed!";; 32 33 7?|7?\.*) 34 35 score_rank[i]="Medium!";; 36 37 8?|8?\.*) 38 39 score_rank[i]="Good!";; 40 41 100|100\.0|9?|9?\.*) 42 43 score_rank[i]="Excellent!";; 44 45 *) 46 47 score_rank[i]="Not a Score";; 48 49 esac 50 51 done 52 53 declare -i j 54 55 for (( j=0; $j<${#sorted_arr[@]}; j=$j+1 )) 56 57 do 58 59 echo "${sorted_arr[j]} ${score_rank[j]}" 60 61 done
注释:
read -a score_arr 将输入的分数都读入score_arr数组中,并且可以按空格分隔
sorted_arr=($(printf '%s\n' "${score_arr[@]}"|sort -n -r)) 对score_arr数组中所有元素按数值(-n)倒序 (-r)排序
declare -i i 申明变量i为数值型变量
${#sorted_arr[@]} 指数组sorted_arr的元素个数
echo "${sorted_arr[j]} ${score_rank[j]}" 注意显示数组元素的方法
运行截图: