linux shell程式設計

winston_DBA發表於2015-07-30

最近在鞏固shell程式設計,把《Linux Shell 命令列及指令碼程式設計例項講解》一書過了一遍,雖然在閱讀過程中也有在自己機器上實現書中樣例,但是感覺動手還是偏少,並且樣例均是知識點的講解,感覺不夠連續,於是在網上搜一些shell程式設計的題目,其中有一篇感覺還比較簡單,先拿來練練手,找找信心。

題目描述:需要從一批學生中隨機抽取10名參加活動,抽取方法為讓學生輸入自己的名字,隨之生成一個0到99之間的數字,數字從大到小排序,前10名為參加活動的學生。

要求1:前面抽過的數字,後面的同學不能再抽到,避免出現同樣大小的數字。

要求2:將名學生字和抽到的數字記錄到檔案中。

要求3:學生輸入名字後,螢幕輸出其名字和抽到的數字,程式不退出,繼續等待下個學生的輸入。
 
實現程式碼如下:


點選(此處)摺疊或開啟

  1. #!/bin/bash
  2. #宣告一個陣列,用於存放已經抽到的數字
  3. declare -a number_array
  4. i=0
  5. num=0
  6. #判斷當前學生抽到的數字是否之前已經被抽到,傳入引數分別為存放數字的陣列和當前抽到的數字
  7. function num_exist(){
  8. for data in $1
  9. do
  10. if [ $data -eq $2 ]
  11. then
  12. return 1
  13. fi
  14. done
  15. }
  16. #開始迴圈等待輸入,迴圈限制為90,避免學生數超過100時,陷入死迴圈和超過90時,產生不重複數字時間較長
  17. while [ $i -le 90 ]
  18. do
  19. echo -n "please enter your name(enter exit to finish the program): "
  20. read -r name
  21. if [ $name == "exit" ]
  22. then
  23. break
  24. else
  25. echo -e "\n"
  26. let i++
  27. while true
  28. do
  29. num=$(( $RANDOM%100 ))
  30. num_exist "${number_array[*]}" $num
  31. if [ $? -eq 0 ]
  32. then
  33. echo "your name is $name and your number is $num "
  34. echo "$num $name" >> data.txt
  35. break
  36. else
  37. continue
  38. fi
  39. done
  40. number_array[i]=$num
  41. echo -e "\n"
  42. fi
  43. done
  44. #取前十名學生記錄輸出
  45. sort -nr data.txt |head -n 10
  46. rm -f data.txt

 
 
  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30167136/viewspace-1757092/,如需轉載,請註明出處,否則將追究法律責任。

相關文章