bash 脚本写的“抓阄程序”(随机数)

刚才想着抓阄,又懒着去找笔,就顺手写了一个抓阄的脚本:


使用前创建一个抓阄项目的文件,比如,我想以后着重研究“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
}


你可能感兴趣的:(bash 脚本写的“抓阄程序”(随机数))