編寫shell指令碼實現統計一個小組的成績情況,統計資訊包括:總分,平均分,最高分...
編寫shell指令碼實現統計一個小組的成績情況,統計資訊包括:總分,平均分,最高分_百度知道
https://zhidao.baidu.com/question/1821577782301852148.html
!/bin/bash
2013/07/01 sun
功能說明:實現統計錄入學生成績的總人數,得出最高分,最低分,平均分,方差,標準方差,還有各個分數段的所佔百分比
echo "請輸入所有學生的成績,以空格隔開:"
read -a score_arr
定義一個陣列來存放使用者輸入的成績
sorted_arr=($(printf '%s\n' "${score_arr[@]}"|sort -n -r))
錄入學生成績,並且是成績之間使用空格隔開
declare -i i b=0 c=0 d=0 e=0 f=0
定義變數i來迴圈陣列,依次讀出陣列裡面的資料,定義五個初值為0的變數來存放每個分數段的人數
for (( i=0; $i<${#sorted_arr[@]}; i=$i+1 ))
進行for迴圈,依次取出陣列裡面的資料
do
對每個取出來的資料進行判斷
case ${sorted_arr[i]} in
?|?.|[1-5]?|[1-5]?.)
如果取出陣列裡面的資料在60分以下
b=$(($b+1));;
變數b自加1,進行統計資料
6?|6?.*)
如果取出陣列裡面的資料在60分--69分之間
c=$(($c+1));;
變數c自加1,進行統計資料
7?|7?.*)
如果取出陣列裡面的資料在70分--79分之間
d=$(($d+1));;
變數d自加1,進行統計資料
8?|8?.*)
如果取出陣列裡面的資料在80分--89分之間
e=$(($e+1));;
變數e自加1,進行統計資料
100|100.0|9?|9?.*)
如果取出陣列裡面的資料在90分--100分之間
f=$(($f+1));;
變數f自加1,進行統計資料
*)
score_rank[i]="Not a Score";;
esac
done
判斷結束
count=$(($b+$c+$d+$e+$f))
算出總人數
declare -i j max min ave countall=0 u ua=0 ual=0 uall=0 fang
定義變數j,最大值max,最小值min,平均數ave,所有人的分數之和countall
max=${sorted_arr[0]}
獲取排序後的陣列的第一個數,也就是最大數
j=$((${#sorted_arr[@]}-1))
得到排序後的陣列的最後的一個分數的下標
min=${sorted_arr[j]}
獲取排序後的陣列的最後一個數,也就是最小數
for (( j=0; $j<${#sorted_arr[@]}; j=$j+1 ))
進行for迴圈,讓學生成績相加,算出學生成績的總分
do
countall=$countall+${sorted_arr[j]}
done
ave=$countall/$count
算出平均成績
for (( j=0; $j<${#sorted_arr[@]}; j=$j+1 ))
進行for迴圈,讓學生成績相加,算出學生成績的總分
do
ua=$(awk -v va=${sorted_arr[j]} -v vb=$ave 'BEGIN{printf "%2d" ,va-vb}')
讓每一個數都減去平均數然後賦值於ua
ual=$(awk -v va=$ua -v vb=$ua 'BEGIN{printf "%2d" ,va*vb}')
算得ua的平方
uall=$(awk -v va=$uall -v vb=$ual 'BEGIN{printf "%2d" ,va+vb}')
算出它們的總合,也就是方差
done
u=$(awk -v va=$uall -v vb=$count 'BEGIN{printf "%2d" ,va/vb}')
算出學生成績的平均分,並賦值於ave
下面是計算每個分數段的百分數
countb=$(awk -v va=$b -v vb=$count 'BEGIN{printf "%2.2f%%" ,va*100/vb}')
echo $countb
countc=$(awk -v va=$c -v vb=$count 'BEGIN{printf "%2.2f%%" ,va*100/vb}')
echo $countc
countd=$(awk -v va=$d -v vb=$count 'BEGIN{printf "%2.2f%%" ,va*100/vb}')
echo $countd
counte=$(awk -v va=$e -v vb=$count 'BEGIN{printf "%2.2f%%" ,va*100/vb}')
echo $counte
countf=$(awk -v va=$f -v vb=$count 'BEGIN{printf "%2.2f%%" ,va*100/vb}')
echo $countf
輸出結果
echo "總人數 最高分 最低分 平均分 方差 "
echo "$count $max $min $ave $u "
echo "標準方差="
echo "scale=5;sqrt($u)" | bc
算出標準方差
echo " 60分以下 60--69 70--79 80--89 90--100"
echo "人數" " $b $c $d $e $f"
echo "比例" "$countb $countc $countd $counte $countf"
相關文章
- python寫的簡單分組統計指令碼Python指令碼
- 巧用shell指令碼統計磁碟使用情況指令碼
- [Shell] awk 統計分組資料
- Linux系統中Shell指令碼編寫的一點心得Linux指令碼
- 【shell 】 使用 shell 計算成績
- 通過shell指令碼生成資料統計資訊的報表指令碼
- 透過shell指令碼生成資料統計資訊的報表指令碼
- Shell 指令碼編寫指令碼
- 一個很好的指令碼,用來顯示cbo的統計資訊指令碼
- 統計子目錄大小的shell指令碼(轉)指令碼
- 10 個實戰及面試常用 Shell 指令碼編寫面試指令碼
- 利用shell指令碼統計程式碼行數指令碼
- 使用shell指令碼巧妙統計檔案指令碼
- Shell 系統資訊監控指令碼指令碼
- 今天寫了一個統計執行sql次數的指令碼SQL指令碼
- 編寫可靠 shell 指令碼的 8 個建議指令碼
- 監控系統使用情況shell指令碼指令碼
- 資訊系統設計一個平臺--利於實施的平臺
- 編寫shell指令碼的規範指令碼
- 如何編寫高效的 Shell 指令碼指令碼
- 檢視錶的統計資訊SQL指令碼SQL指令碼
- 通過shell指令碼來統計段大小指令碼
- 資料統計指令碼(彙總)指令碼
- Oracle運維指令碼-收集統計資訊Oracle運維指令碼
- Oracle 分組彙總統計函式的使用Oracle函式
- mongodb分組統計MongoDB
- 【Shell】使用指令碼實現數以千計HTML檔案中圖片名小寫轉換需求指令碼HTML
- 利用shell指令碼實現計劃任務功能指令碼
- 用Shell擴充套件實現原始碼統計程式套件原始碼
- Linux 中高效編寫 Shell 指令碼的 10 個技巧Linux指令碼
- SQL Server 監控統計阻塞指令碼資訊SQLServer指令碼
- Oracle 11g 統計資訊收集指令碼Oracle指令碼
- 表統計資訊匯出匯入指令碼指令碼
- 如何使用zx編寫shell指令碼指令碼
- 查詢統計SQL分組求和使用小技巧SQL
- 一個真正符合中國國情的工作流設計參考(包括PHP實現)PHP
- sql統計時間出現斷點的相關情況SQL斷點
- 分享檢視統計資訊非常好的指令碼指令碼