在unix-shell中生成一个随机文件名

你们一直抱怨这个地方,但是你们却没有勇气走出这里

使用系统的 $RANDOM 变量

$RANDOM 的范围是 [0, 32767]

1
echo $RANDOM

自建函数

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
function rand(){
min=$1
max=$(($2-$min+1))
num=$(($RANDOM+1000000000)) #增加一个10位的数再求余
echo $(($num%$max+$min))
}

rnd=$(rand 400000 500000)
echo $rnd

使用date +%s%N

生成1-50的随机数

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
function rand(){
min=$1
max=$(($2-$min+1))
num=$(date +%s%N)
echo $(($num%$max+$min))
}

rnd=$(rand 1 50)
echo $rnd

使用/dev/random 和 /dev/urandom

假设你在一个linux,以下应该工作:

1
cat /dev/urandom | tr -cd 'a-f0-9' | head -c 32

这只是伪随机的,如果你的系统运行低熵,但(在linux)保证终止。如果你需要真正随机的数据,cat / dev / random代替/ dev / urandom。这个更改将使你的代码块,直到足够的熵可用来产生真正的随机输出,所以它可能会减慢你的代码。对于大多数用途,/ dev / urandom的输出是充分随机的。

如果在OS X或其他BSD上,您需要将其修改为以下内容:

1
cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32

使用linux uuid

uuid 全称是通用唯一识别码,格式包含32个16进制数字,以’-‘连接号分为5段。形式为8-4-4-4-12 的32个字符。

1
cat /proc/sys/kernel/random/uuid

https://codeday.me/bug/20170816/53801.html
https://blog.csdn.net/fdipzone/article/details/24329523