刚才想着抓阄,又懒着去找笔,就顺手写了一个抓阄的脚本:
使用前创建一个抓阄项目的文件,比如,我想以后着重研究“C/C++"、"Java"、"Python"中的一个,首先创建一个随便什么名字的文件:
xiwang@ubuntu:~/Dev/DrowLots$ cat records.txt
C/C++
Java
Python
xiwang@ubuntu:~/Dev/DrowLots$ ./drowlots.sh records.txt
Python
好了,我知道了,以后C/C++继续是我的主打语言,但是多多学习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
}