最近在巩固shell编程,把《Linux Shell 命令行及脚本编程实例讲解》一书过了一遍,虽然在阅读过程中也有在自己机器上实现书中样例,但是感觉动手还是偏少,并且样例均是知识点的讲解,感觉不够连续,于是在网上搜一些shell编程的题目,其中有一篇感觉还比较简单,先拿来练练手,找找信心。
题目描述:需要从一批学生中随机抽取10名参加活动,抽取方法为让学生输入自己的名字,随之生成一个0到99之间的数字,数字从大到小排序,前10名为参加活动的学生。
要求1:前面抽过的数字,后面的同学不能再抽到,避免出现同样大小的数字。
要求2:将名学生字和抽到的数字记录到文件中。
要求3:学生输入名字后,屏幕输出其名字和抽到的数字,程序不退出,继续等待下个学生的输入。
实现代码如下:
-
#!/bin/bash
-
#声明一个数组,用于存放已经抽到的数字
-
declare -a number_array
-
i=0
-
num=0
-
#判断当前学生抽到的数字是否之前已经被抽到,传入参数分别为存放数字的数组和当前抽到的数字
-
function num_exist(){
-
for data in $1
-
do
-
if [ $data -eq $2 ]
-
then
-
return 1
-
fi
-
done
-
}
-
#开始循环等待输入,循环限制为90,避免学生数超过100时,陷入死循环和超过90时,产生不重复数字时间较长
-
while [ $i -le 90 ]
-
do
-
echo -n "please enter your name(enter exit to finish the program): "
-
read -r name
-
if [ $name == "exit" ]
-
then
-
break
-
else
-
echo -e "\n"
-
let i++
-
while true
-
do
-
num=$(( $RANDOM%100 ))
-
num_exist "${number_array[*]}" $num
-
if [ $? -eq 0 ]
-
then
-
echo "your name is $name and your number is $num "
-
echo "$num $name" >> data.txt
-
break
-
else
-
continue
-
fi
-
done
-
number_array[i]=$num
-
echo -e "\n"
-
fi
-
done
-
#取前十名学生记录输出
-
sort -nr data.txt |head -n 10
-
rm -f data.txt
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30167136/viewspace-1757092/
,如需转载,请注明出处,否则将追究法律责任。