【发布时间】:2013-10-07 11:37:32
【问题描述】:
我想制作一个 bash 脚本,它向标准输出发送一个只包含 ASCII 可写字符的文件图像。我的脚本应该只接收和接受一个参数,其中包含应该从/dev/urandom 读取的八位字节数。
所以,我需要从/dev/urandom 中读取给定数量的八位字节,以创建要发送到标准输出的文件图像。
我有这个:
!/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。当然这只是一个草图。
有人告诉我有一个名为 strings 的命令可以从任何文件中读取和提取字符序列,但我在互联网上查过,找不到太多关于它的信息。
所以我的问题是:如何从 /dev/random 读取参数中给出的八位字节数,以便我可以将它们放入标准输出(我知道如何放入标准输出:))
【问题讨论】:
-
关于批量创建随机字符的有趣想法。不确定(并且无法正确测试)bash 是否具有与 ksh、$RANDOM 相同的变量。这是一种更易于管理的替代解决方案,因为您可以一次分配一个,即
myRand=$RANDOM; case $myRand in [A-Za-z0-9] * ) word=$word${myRand} ;((wordSize++));; esac或类似名称。您需要将其包装在一个 while 循环中,该循环根据您的输入X监视 wordSize。祝你好运。 -
@shellter 非常感谢,现在将对其进行测试:D
-
hm.. 当我在上面回答时刚刚醒来。现在我注意到 myRand 将是一个数字,而不是一个字符,你需要将整数“转换”为一个字符。出于某种原因,我的内置 printf 没有按预期工作,所以我能做的最好的就是调用像
myChar=$(awk -v num=$myRand 'END{printf("%c", num)}')这样的 awk 之类的外部程序,并使用 myChar,而不是 myRand。下面的解决方案看起来也不错,这取决于您的需要,或者谁将继续维护您的代码。祝你好运。