【发布时间】:2011-03-23 16:02:45
【问题描述】:
我需要在 Solaris 上的 KSH 中生成 12 位十六进制数
谢谢
【问题讨论】:
标签: linux scripting solaris ksh
我需要在 Solaris 上的 KSH 中生成 12 位十六进制数
谢谢
【问题讨论】:
标签: linux scripting solaris ksh
#!/bin/ksh
set -A hex 0 1 2 3 4 5 6 7 8 9 A B C D E F
for i in {1..12}
do
printf ${hex[$((RANDOM%16))]}
done
【讨论】:
head -c 4 /dev/urandom | od -x | head -1 | cut -d' ' -f6
$(()): ${hex[RANDOM%16]}。你也可以hex=({0..9} {A..F})。 (这些在 ksh93 中是正确的。我不确定早期版本。)
从这个 Python 程序开始,hex12.py。
hex12.py
#!/usr/bin/env python
import random
import hashlib
h= hashlib.sha1(str(random.random())).hexdigest()
print h[:12]
在您的 shell 中,您现在可以使用 hex.py 在标准输出上创建 12 个十六进制数字。
【讨论】:
x 权限,那么#!/usr/bin/env python 会导致ksh 调用Python。每次。可靠。事实上,它几乎适用于所有 shell。
试试这个:
DIGITS=`head -c 6 /dev/urandom | od -x | head -n 1 | sed -e 's/^0* //' -e 's/ //g'
【讨论】:
由于 RANDOM 变量生成一个 15 位数字(从 0 到 32767),您可以连接多个 RANDOM 值。
您将需要一个 48 位数字,因为 12 个十六进制数字是 12 * 4 = 48 位。
要么:
$ printf '%x\n' $(( ((RANDOM<<15|RANDOM)<<15|RANDOM)<<3|RANDOM%8 ))
9142467b46d3
或者:
$ printf '%x' $((RANDOM%4096)) $((RANDOM%4096)) $((RANDOM%4096)) $((RANDOM%4096)); echo
808878c21e19
【讨论】: