ITPub博客

首页 > Linux操作系统 > Linux操作系统 > linux shell编程

linux shell编程

原创 Linux操作系统 作者:winston_DBA 时间:2015-07-30 20:58:56 0 删除 编辑

最近在巩固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博客 ” ,链接:https://blog.itpub.net/30167136/viewspace-1757092/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-03-17

  • 博文量
    76
  • 访问量
    414949