Bash Shell生成随机数
时间:2020-01-09 10:37:26 来源:igfitidea点击:
如何在Bash shell下创建或生成随机数(缺少任何模式的数字序列)?
bash shell提供了$RANDOM变量(它也与ksh一起使用)。
从bash手册页:
每次引用该值时,都会生成0到32767之间的随机整数。
可以通过为RANDOM分配一个值来初始化随机数序列。
如果未设置RANDOM,则即使随后将其重置,它也会丢失其特殊属性。
要查看$RANDOM,请输入:
$ echo $RANDOM
输出示例:
11799
您可以按以下方式使用bash循环来测试随机数:
for i in {1..5}; do echo $RANDOM; done
输出示例:
32340 18591 32100 15165 19743
您可以将其存储到变量,如下所示:
#!/bin/bash n=$RANDOM echo "My move: trying $n..."
您可以在一定范围内使用随机整数,如下所示:
n=$RANDOM # display a random integer <= 200 echo $(( r %= 200 )) # display random number between 100 and 200. echo $((RANDOM%200+100))
这是一个示例shell脚本,用于找出随机的TCP端口:
#!/bin/bash # Set a trap to detect spam bots at port 80 # Find out random unused TCP port findRandomTcpPort(){ port=$(( 100+( $(od -An -N2 -i /dev/random) )%(1023+1) )) while : do (echo >/dev/tcp/localhost/$port) &>/dev/null && port=$(( 100+( $(od -An -N2 -i /dev/random) )%(1023+1) )) || break done echo "$port" } p=$(findRandomTcpPort) echo "Setting Honeypot @ port 80 and real Apache server at port $p..." # setHoneypot 80 # setApache $p
另一个用于设置随机墙纸的shell脚本。
您可以从crontab中调用此命令:
#!/bin/bash # get images files=(/nas/download/share/fun/images/wallpapers/*.png) # find out random one n=${#files[@]} wallpaper="${files[RANDOM % n]}" # Kde3 command (may not work with kde4) # dcop kdesktop KBackgroundIface setWallpaper "$wallpaper" 5 # Gnome command gconftool-2 --type string --set /desktop/gnome/background/picture_filename "$wallpaper"
使用/dev/urandom或/dev/random
字符特殊文件/dev/random和/dev/urandom提供了内核随机数生成器的接口。
您可以按以下方式使用/dev/urandom:
$ od -vAn -N4 -tu4 < /dev/urandom
输出示例:
2494028411
您可以使用/dev/random,如下所示:
$ od -An -N2 -i /dev/random
输出示例:
62362