我想制作bash脚本,将仅包含ASCII可写字符的文件图像发送到stdout。我的脚本应仅接收和接受一个参数,该参数包含应从/dev/urandom
中读取的八位字节数。
因此,我需要从/dev/urandom
中读取给定数量的八位位组,以创建一个文件图像以发送到stdout。
我有这个:
!/usr/bin/env bash
X=1
if [ $X -eq 0 ]; then
echo "Error: An argument is needed"
else
strings /dev/urandom
echo the result
fi
我正在检查是否有任何参数,如果有,请读取/dev/urandom
。当然,这只是一个草图。
有人告诉我,有一个名为字符串的命令可以从任何文件中读取和提取字符序列,但是我已经在Internet上进行了检查,但找不到很多有关此信息。
所以我的问题是:如何从/ dev / random中读取参数中给出的八位字节数,以便可以将它们放入stdout(我知道如何放入stdout :))
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