使用Shell脚本生成随机单词
2016-11-19 18:36
567 查看
最近需要一些随机的单词,或字符串用于测试。生成随机的字符串的方法有很多种,那如何生成一些随机的单词了?
在Linux系统中自带了一个词典文件,其中存储了大量的单词,借助这个词典文件和随机数可以生成任意的随机单词。Linux中的这个词典文件位于/usr/share/dict/目录下,这些单词每个占一行。现在目标已经很明确了,只要生成任意随机数,然后读取这个单词就可以了。sed可以读取一个文件的指定行,例如 sed -n 10p filename可以读取filename这个文件的第10行。
至于随机数可以使用 RANDON这个变量来获得。但是RANDON所获得的随机数范围为[0, 32767],而我们的字典文件中共有479623个单词。打开词典文件,可以发现单词是按字典序排列的,而且单词排列的很密,存在很多“相似度”很高的单词,实际也没有要求随机性那么良好的随机数。因此将随机数乘以一个常数后对单词总数取余,这里常数选用一个质数(为什么是质数?质数很有很多神奇的地方。脚本中使用37,主要想RANDOM乘以常数取余后,能尽量覆盖整个0−479623)(当然,因为C/C++生成的随机数范围要比shell的RANDOM范围大的多,但是用C/C++方式的实现要比shell来的麻烦一些)
另外发现如果你的文本编辑器默认以windows风格的换行,在调试时,会报语法错
‘syntax error near unexpected token `’
这是因为在windows环境下换行默认是 \r\n,Linux环境则是\n,需要进行转换,在Linux环境中可以用dos2unix来转换。在Windows环境中可以借助Notepad++来转换
方法是菜单项编辑->文档格式转换->转换为Unix格式;使用sublime的话,暂未找到默认设置的为Unix格式的方式。
在Linux系统中自带了一个词典文件,其中存储了大量的单词,借助这个词典文件和随机数可以生成任意的随机单词。Linux中的这个词典文件位于/usr/share/dict/目录下,这些单词每个占一行。现在目标已经很明确了,只要生成任意随机数,然后读取这个单词就可以了。sed可以读取一个文件的指定行,例如 sed -n 10p filename可以读取filename这个文件的第10行。
至于随机数可以使用 RANDON这个变量来获得。但是RANDON所获得的随机数范围为[0, 32767],而我们的字典文件中共有479623个单词。打开词典文件,可以发现单词是按字典序排列的,而且单词排列的很密,存在很多“相似度”很高的单词,实际也没有要求随机性那么良好的随机数。因此将随机数乘以一个常数后对单词总数取余,这里常数选用一个质数(为什么是质数?质数很有很多神奇的地方。脚本中使用37,主要想RANDOM乘以常数取余后,能尽量覆盖整个0−479623)(当然,因为C/C++生成的随机数范围要比shell的RANDOM范围大的多,但是用C/C++方式的实现要比shell来的麻烦一些)
#!/bin/bash #randomWords.sh #词典文件所在路径 filepath=/usr/share/dict/words #生成的结果文件 resultFile=./result.txt #词典文件中总共有多少个单词 totalWordsNum=`wc -l $filepath | awk '{print $1}'` idx=1 #NUM为要生成的随机单词的个数 NUM=100 declare -i num declare -i randNum ratio=37 while [ "$idx" -le "$NUM" ] do a=$RANDOM num=$(( $a*$ratio )) randNum=`expr $num%$totalWordsNum` echo $randNum sed -n "$randNum"p $filepath >> $resultFile idx=`expr $idx + 1` done
另外发现如果你的文本编辑器默认以windows风格的换行,在调试时,会报语法错
‘syntax error near unexpected token `’
这是因为在windows环境下换行默认是 \r\n,Linux环境则是\n,需要进行转换,在Linux环境中可以用dos2unix来转换。在Windows环境中可以借助Notepad++来转换
方法是菜单项编辑->文档格式转换->转换为Unix格式;使用sublime的话,暂未找到默认设置的为Unix格式的方式。
相关文章推荐
- shell脚本中使用seq生成连续整数
- Shell创建用户并生成随机密码脚本分享
- CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动
- 使用Shell写一个随机发牌的脚本
- Shell脚本生成随机密码的若干种可能
- shell随机生成十位密码脚本
- 使用python脚本生成随机密码
- 使用shell脚本生成*Db.java、*.thrift或*.yaml文件语句
- linux下利用shell脚本随机生成密码
- 一个shell脚本给客户使用服务器生成一个序列号
- Shell脚本批量创建用户并随机生成密码
- 使用Python脚本生成随机IP的简单方法
- 使用Python脚本生成随机IP的简单方法
- 使用jmeter运行java脚本,实现手机号码随机生成
- shell随机生成十位密码脚本
- Shell脚本批量创建用户并随机生成密码
- shell脚本实现随机生成10个8位密码
- 如何使用Shell脚本编译生成Archive文件并导出签名IPA文件。
- 使用shell脚本新增20个用户密码为随机5个字符
- Shell脚本之:生成随机密码的若干种可能