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