0412 linux 三剑客实战抽奖

中奖同学

  • 5元: 丁元霞
  • 10元:Joker 沫沫老师 谭家华

第一个实现:有空白

#!/bin/bash
rand() {
  # 从文件中读取所有人的信息,用..代替空格
  local seeds=`while read line;do echo ${line// /..} ;done < tmp.txt`
  local count=0
  # 不停的进行筛选,直到只剩一个同学为止
  while [[ $count != 1 ]];do
    #从seeds中筛选出一部分人:进行猜拳操作,如果是1,进行下一轮,如果是0,则淘汰
    seeds=`for seed  in $seeds;do  (($RANDOM%2)) && echo $seed;done`
    #计算当前幸运人数
    count=`echo "$seeds" | wc -l`
  done

  echo $seeds
}

rand

第二个实现:无空白

#!/bin/bash
rand() {
  # 从文件中读取所有人的信息,用..代替空格
  local seeds=`while read line;do echo ${line// /..} ;done < tmp.txt`
  local count=0
  # 不停的进行筛选,直到只剩一个同学为止
  while [[ $count != 1 ]];do
    #从seeds中筛选出一部分人:进行猜拳操作,如果是1,进行下一轮,如果是0,则淘汰
    seeds=`for seed  in $seeds;do  (($RANDOM%2)) && echo $seed;done`
    #计算当前幸运人数
    count=`echo "$seeds" | wc -l`
  done
  # 如果发现是空,就再进行筛选
  if [[ $seeds == "" ]];then
     # 递归调用,本函数
     rand
  else
    # 如果不是空,则输出
    echo $seeds
  fi
}

rand

实现3:去重

#!/bin/bash
#筛选出一个人
rand() {
  # 从文件中读取所有人的信息,用..代替空格
  local seeds=`while read line;do echo ${line// /..} ;done < tmp.txt`
  local count=0
  # 不停的进行筛选,直到只剩一个同学为止
  while [[ $count != 1 ]];do
    #从seeds中筛选出一部分人:进行猜拳操作,如果是1,进行下一轮,如果是0,则淘汰
    seeds=`for seed  in $seeds;do  (($RANDOM%2)) && echo $seed;done`
    #计算当前幸运人数
    count=`echo "$seeds" | wc -l`
  done
  if [[ $seeds == "" ]];then
     rand
  else
    echo $seeds
  fi
}

#筛选出多个人
res() {
  # 可以用for实现从1到10的遍历
  for i in {1..10};do
  tmp=`rand`
  # 去重
  while [[ `is_repeat $tmp` == 0 ]];do
    tmp=`rand`
  done
  arrs[$i]=$tmp
  done
  echo ${arrs[@]}
}

#把输进来的数据与数组内的值进行比较
#如果有相同的值,则echo 0
#如果没有相同的值 ,则echo 1
is_repeat() {
  #遍历数组
  for arr in ${arrs[@]};do
    # 把输进来的值与数组中的每一个值进行比较
    if [[ $arr == $1 ]];then
      # 如果相同,输出0
      echo 0;
      # 结束函数
      return 0;
    fi
  done
  # 如果没有相同的值 ,则输出1
  echo 1
}

res


实现4: 外部数据参数化

#筛选出多个人
res() {
  # 此处$1是别人传给res的值
  for((i=0;i<$1;i++));do
  tmp=`rand`
  # 去重
  while [[ `is_repeat $tmp` == 0 ]];do
    tmp=`rand`
  done
  arrs[$i]=$tmp
  done
  echo ${arrs[@]}
}
# 把脚本外的值转递给res函数
res $1

关闭