$RANDOM是Bash的一个返回伪随机整数(范围为0-32767)的内部函数(而不是一个常量或变量),它不应该用于产生加密的密钥.例1.产生随机整数 1#!/bin/bash 2 3#每次调用$RANDOM都会返回不同的随机整数. 4#范围为:0-32767(带符号的16位整数). 5 6MAXCOUNT=10 7count=1 8 9echo 10echo"$MAXCOUNTrandomnumbers:" 11echo"-----------------" 12while["$count"-le$MAXCOUNT] #产生10($MAXCOUNT)个随机整数. 13do 14 number=$RANDOM 15 echo$number 16 let"count+=1" #增加计数. 17done 18echo"-----------------" 19 20#如果你需要某个范围的随机整数,可以使用取模操作符.(译者注:事实上,这不是一个非常好的办法。理由请见man3rand) 21#取模操作会返回除法的余数. 22 23RANGE=500 24 25echo 26 27number=$RANDOM 28let"number%=$RANGE" 29# ^^ 30echo"Randomnumberlessthan$RANGE --- $number" 31 32echo 33 34 35 36# 如果你需要一个大于某个下限的随机整数, 37#+应该增加测试以便抛弃所有小于此下限值的数值. 38 39FLOOR=200 40 41number=0 #初始化 42while["$number"-le$FLOOR] 43do 44 number=$RANDOM 45done 46echo"Randomnumbergreaterthan$FLOOR--- $number" 47echo 48 49 #让我们检测另外一个完成上面循环作用的简单办法,即 50 # let"number=$RANDOM+$FLOOR" 51 #这能避免了while循环,并且运行得更快。 52 #但,使用这个技术可能会产生问题,思考一下是什么问题? 53 54 55 56#联合上面两个技巧重新产生在两个限制值之间的随机整数. 57number=0 #初始化 58while["$number"-le$FLOOR] 59do 60 number=$RANDOM 61 let"number%=$RANGE" #Scales$numberdownwithin$RANGE. 62done 63echo"Randomnumberbetween$FLOORand$RANGE--- $number" 64echo 65 66 67 68#产生二元值,即"真"或"假". 69BINARY=2 70T=1 71number=$RANDOM 72 73let"number%=$BINARY" 74# 注意 let"number>>=14" 会产生更平均的随机分布 #(译者注:正如在man手册里提到的,更高位的随机分布更平均, 75#+(除了最后的二元值右移出所有的值). #取模操作使用低位来产生随机会相对不平均) 76if["$number"-eq$T] 77then 78 echo"TRUE" 79else 80 echo"FALSE" 81fi 82 83echo 84 85 86#模拟掷骰子. 87SPOTS=6 #模除6会产生0-5之间的值. 88 #结果增1会产生1-6之间的值. 89 #多谢PauloMarcelCoelhoAragao的简化. 90die1=0 91die2=0 92#这会比仅设置SPOTS=7且不增1好?为什么会好?为什么会不好? 93 94#单独地掷每个骰子,然后计算出正确的机率. 95 96 let"die1=$RANDOM%$SPOTS+1"#掷第一个. 97 let"die2=$RANDOM%$SPOTS+1"#掷第二个. 98 # 上面的算术式中,哪个操作符优先计算-- 99 #+取模(%)还是加法(+)? 100 101 102let
上一篇:双括号结构_程序数据_shell
下一篇:linux系统与管理命令信息与统计类_程序数据_shell