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

使用前创建一个抓阄项目的文件,比如,我想以后着重研究“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 VERSIONcd $(dirname $0)
WORKDIR=$PWDtest ! -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_RETRUNreturn 0
}sed '/^[[:blank:]]*$/d' -i $RECORD_FILErandom $(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 VERSIONtest ! -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_RETRUNreturn 0
}sed '/^[[:blank:]]*$/d' -i $RECORD_FILErandom $(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 脚本写的“抓阄程序”(随机数)相关推荐

  1. [分享]写出健壮的Bash脚本

    许多人用shell脚本完成一些简单任务,而且变成了他们生命的一部分.不幸的是,shell脚本在运行异常时会受到非常大的影响.在写脚本时将这类问题最小化是十分必要的.本文中我将介绍一些让Bash脚本变得 ...

  2. 如何写出安全的、基本功能完善的Bash脚本

    每个人或多或少总会碰到要使用并且自己完成编写一个最基础的Bash脚本的情况.真实情况是,没有人会说"哇哦,我喜欢写这些脚本".所以这也是为什么很少有人在写的时候专注在这些脚本上. ...

  3. bash脚本程序语法Linux

    摘要 Shell程序,就是把需要计算机执行的Linux命令罗列到一个文件,再加上控制语句.解释型语言,不需要编译,即脚本文件.Linux下常用的用户登录Shell有Bash,sh,csh,tcsh,k ...

  4. java中bash应用_在bash脚本中查找java应用程序的进程ID(以查看目标应用程序是否已在运行)...

    我知道获取进程ID有一百万个问题,但这个问题似乎是独一无二的.谷歌没有给我答案,所以我希望stackexhange会帮助而不是关闭这个问题. 当涉及Java时,找到进程ID似乎比较棘手(pgrep不起 ...

  5. bash执行mysql的warning怎么屏蔽_使用mysql从终端禁止警告消息,但密码写在bash脚本...

    当我尝试在终端内在MySQL上运行以下命令时: mysql -u $user -p$password -e "statement" 执行按预期工作,但它总是发出警告: Warnin ...

  6. 2022-11-10:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。 为了简单起见,你可以假设: words.txt只包括小写字母和 ‘ ‘ 。 每个单词只由小写

    2022-11-10:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率. 为了简单起见,你可以假设: words.txt只包括小写字母和 ' ' . 每个单词只由小写 ...

  7. 正则表达式及bash脚本(一)

    目录 1 基本正则表达式元字符 1.1 字符匹配 1.2 匹配次数 1.3 位置锚定 1.4 分组其它 1.4.1 分组 1.4.2 或者 2 扩展正则表达式元字符 2.1 字符匹配 2.2 次数匹配 ...

  8. 初学者编写bash脚本教程

    初学者编写bash脚本教程 bash shell script 定义 bash bash是命令语言解释器.广泛用于各种gun/unix系统上的默认命令解释器.全程叫做"Bourne-Agai ...

  9. linux的逻辑运算参数,Linux基础之bash脚本编程初级-逻辑运算与测试

    引言 前面介绍了bash编程的基础变量与算术表达式,本文介绍在脚本中的进阶知识:测试 在bash中测试大体分两部分:条件测试.组合测试. 而条件测试又分:数值测试.字符串测试.文件测试. 组合测试则有 ...

最新文章

  1. javascript --- js中的作用域 变量提升
  2. 关于“进程”与“线程”的最通俗解析
  3. AJAX只支持字符类数据返回,不支持文件下载
  4. Easy Code,IntelliJ IDEA中代码一键生成
  5. The Book of Mozilla
  6. 无线通信设备安装工程概预算编制_南宁市轨道交通5号线一期工程专用无线通信系统设备采购...
  7. 2022电大国家开放大学网上形考任务-简明中国古代史(山东)非免费(非答案)
  8. Windows查看所有的端口
  9. python将图片保存到指定文件夹_python抓取网页图片并放到指定文件夹
  10. 前后端分离的时代,团队间的完美协作
  11. 龙华大浪注塑加工中模具原理及组成
  12. Not enough information to list image symbols. Not enough information to list load addresses in ...
  13. 【Pygame小游戏】真香~这款百万销量万人追捧大富翁游戏终于出现了~(赶紧来玩儿)
  14. 12个思维导图工具,像数据科学家一样结构化地思考
  15. 如何彻底卸载云上PDF?一个非常简单的教程
  16. python运行文件时说系统找不到指定文件-python找不到指定文件
  17. 三维空间 点线面解析
  18. CSDN最全数学公式
  19. 一个简单的朋友圈单张或多张图片展示的思路
  20. CCF 201409-1 相邻数对(Python100分)

热门文章

  1. 打印一只Nyan Cat(彩虹猫)(C++)3.1[多色版]+[修改版]
  2. element-ui组价中表单的验证提示显示后台的提示信息及自定义提示
  3. Schedule()函数相关知识
  4. esxi做文件服务器拒绝,vpshere6 ESXI 禁止登陆 执行此操作的权限被拒绝
  5. 计算机的随想作文600字,青春随想作文600字5篇
  6. Jquery 获取元素属性值
  7. 南开19计算机应用基础,南开19秋学期(1709、1803、1809、1903、1909)《计算机应用基础》在线答案1...
  8. 何去何从,飞进寒冬的无人机
  9. 光栅化Triangles(笔记)
  10. 【抬杠涨能耐,实践出真知】关于某个技术问题争吵