要从/ dev / urandom中读取的Bash脚本

问题描述 投票:1回答:1

我想制作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 :))

bash shell random stdout
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.