(原创)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]}" 注意显示数组元素的方法

 

运行截图:

原文地址:https://www.cnblogs.com/CnZyy/p/2971800.html