我想制作bash脚本,该脚本向stdout发送一个只包含ASCII可写字符的文件映像。我的脚本应该只接收和接受一个包含应从/ dev / urandom读取的八位字节数的参数。 因此,我需要从/ dev / urandom读取给定数量的八位字节以创建要发送到stdout的文件映像。 我有这个:
!/斌/庆典
X = 1
if [$ X -eq 0] then echo“Error:需要参数”
否则
strings / dev / urandom
回应结果网络连接
基本上我正在检查是否有任何参数,如果存在,则读取dev / urandom。当然这只是一个草图。
我被告知有一个叫做字符串的命令,可以从任何文件中读取和提取字符序列,但是我已经在互联网上查了一下,我找不到很多关于它的信息。
所以我的问题是:我如何读取/ dev / random参数中给出的八位字节数,以便我可以将它们放在stdout中(我知道如何使用stdout :))
答案 0 :(得分:6)
strings
不是你想要的。如果您只想将随机字符限制在特定集合中,请过滤掉您不想要的内容。要从/dev/urandom
获取$ num字母数字字符,您可以执行以下操作:
tr -dc A-Za-z0-9 < /dev/urandom | dd bs=$num count=1 2> /dev/null
或
tr -dc '[:alnum:]' < /dev/urandom ...
请注意,这不是严格的便携式。虽然tr
的标准声明它应该适用于任何输入文件,但我的版本却抛出错误“非法字节序列”。另一种选择是:
perl -pe 's/[^a-zA-Z0-9]//g' /dev/urandom | dd bs=$num count=1 2> /dev/null