我需要通过 bash 脚本生成一个新的 GUID。
我已经通过使用 python 脚本完成了这一点:here
#! /usr/bin/env python
import uuid
print str(uuid.uuid1())
但是我需要将此脚本复制到我正在使用的任何新系统中。所以,我想改用 Bash。
您可以使用命令
uuidgen
。只需执行 uuidgen
即可为您提供基于时间的 UUID:
$ uuidgen
18b6f21d-86d0-486e-a2d8-09871e97714e
假设您没有
uuidgen
,则不需要脚本:
$ python -c 'import uuid; print(str(uuid.uuid4()))'
b7fedc9e-7f96-11e3-b431-f0def1223c18
cat /proc/sys/kernel/random/uuid
由于您想要一个随机 UUID,因此您想使用类型 4 而不是类型 1:
python -c 'import uuid; print str(uuid.uuid4())'
这篇维基百科文章解释了不同类型的 UUID。您想要“类型 4(随机)”。
我使用 Python 编写了一个小 Bash 函数来批量生成任意数量的 Type 4 UUID:
# uuid [count]
#
# Generate type 4 (random) UUID, or [count] type 4 UUIDs.
function uuid()
{
local count=1
if [[ ! -z "$1" ]]; then
if [[ "$1" =~ [^0-9] ]]; then
echo "Usage: $FUNCNAME [count]" >&2
return 1
fi
count="$1"
fi
python -c 'import uuid; print("\n".join([str(uuid.uuid4()).upper() for x in range('"$count"')]))'
}
如果您喜欢小写,请更改:
python -c 'import uuid; print("\n".join([str(uuid.uuid4()).upper() for x in range('"$count"')]))'
致:
python -c 'import uuid; print("\n".join([str(uuid.uuid4()) for x in range('"$count"')]))'
在 Python 3 中,不需要强制转换为
str
:
python -c 'import uuid; print(uuid.uuid4())'
如果您只想生成一个在位置 8、12、16 和 20 处带有一些破折号的伪随机字符串,您可以使用
apg
。
apg -a 1 -M nl -m32 -n 1 -E ghijklmnopqrstuvwxyz | \
sed -r -e 's/^.{20}/&-/' | sed -r -e 's/^.{16}/&-/' | \
sed -r -e 's/^.{12}/&-/' | sed -r -e 's/^.{8}/&-/'
apg
子句从[0-9a-f]
(小写)生成 32 个符号。这一系列 sed
命令添加了 -
标记,并且很可能会被缩短。
请注意,UUID 通常具有特定格式:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
这里
M
和 N
字段对 UUID 的版本/格式进行编码。