刚才想着抓阄,又懒着去找笔,就顺手写了一个抓阄的脚本:
使用前创建一个抓阄项目的文件,比如,我想以后着重研究“C/C++"、"Java"、"Python"中的一个,首先创建一个随便什么名字的文件:
xiwang@ubuntu:~/Dev/DrowLots$ cat records.txt C/C++ Java Python
xiwang@ubuntu:~/Dev/DrowLots$ ./drowlots.sh records.txt Python
脚本的一个核心就是随机数的问题,这里直接用这样的bash命令:
G_RANDOM_RETRUN=$((RANDOM % 100 + 1)) # 这样,随机数 1~100 就保存在了G_RANDOM_RETURN环境变量里边了。
脚本如下:
#!/bin/bash # drowlots.sh, 2012-06-16 T2129 # # @param $1 - A file contains all the items, ONE RECORD PER LINE. # NAME="drowlots.sh"; export NAME VERSION="2012-06-16 T2129"; export VERSION cd $(dirname $0) WORKDIR=$PWD test ! -z "$1" && test -f "$1" || { echo "Need a input file, which includes records in lines" exit 1 } RECORD_FILE="$1" # get a random # @param $1 - get radom number from 1 to $1 # return $G_RANDOM_RETRUN, the random number. random() { test ! -z "$1" && test "$1" -ge 1 || { return 1 } G_RANDOM_RETRUN=$((RANDOM % $1 + 1)); export G_RANDOM_RETRUN return 0 } sed '/^[[:blank:]]*$/d' -i $RECORD_FILE random $(wc -l $RECORD_FILE) || { echo "random's param should be >= 1" } sed -n "$G_RANDOM_RETRUN {p}" $RECORD_FILE
下边的实现,是多人的情况下一人一阄的玩法,而不是自己抓着玩:
需求是这样的,一人抓一次,用同一个数据文件,知道抓完为止,上次实现就变成
$./drowlots.sh records.txt #<! 第一个人抓阄,拿到了Java Java $./drowlots.sh records.txt #<! 第二个人抓阄,拿到了C/C++ C/C++ $./drowlots.sh records.txt #<! 第三个人抓阄,拿到了Python Python No drow lost left
#!/bin/bash # drowlots.sh, 2012-06-17 T0953 # # @param $1 - A file contains all the items, ONE RECORD PER LINE. # NAME="drowlots.sh"; export NAME VERSION="2012-06-17 T0953"; export VERSION test ! -z "$1" && test -f "$1" || { echo "Need a input file, which includes records in lines" exit 1 } # $RECORD_FILE is a copy of $1, and used for processing runtime. RECORD_FILE="$1.$(date +"drowlots")" test -f $RECORD_FILE || { cp "$1" "$RECORD_FILE" } # get a random # @param $1 - get radom number from 1 to $1 # return $G_RANDOM_RETRUN, the random number. random() { test ! -z "$1" && test "$1" -ge 1 || { return 1 } G_RANDOM_RETRUN=$((RANDOM % $1 + 1)); export G_RANDOM_RETRUN return 0 } sed '/^[[:blank:]]*$/d' -i $RECORD_FILE random $(cat $RECORD_FILE | wc -l) sed -n "$G_RANDOM_RETRUN {p}" $RECORD_FILE sed "$G_RANDOM_RETRUN {d}" -i $RECORD_FILE # remove $RECORD_FILE test $(cat $RECORD_FILE | wc -l) -ge 1 || { echo "No drow lost left" rm -f $RECORD_FILE }