在shell脚本中使用变量作为命令行输入

时间:2016-05-29 17:33:57

标签: bash shell

我在shell脚本中执行此命令。

sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 66 j8 hj g7 d0 f5 a7 10 96 e0 99 99 99 99 c5 00

我想将99对的4对更改为我生成的相同随机值,我尝试了这段代码,但是我已经消耗了00.随机函数工作正常。

random="$(cat /dev/urandom | base64 | head -c 2)"
echo $random
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 66 j8 hj g7 d0 f5 a7 10 96 e0 $random $random $random $random c5 00

2 个答案:

答案 0 :(得分:3)

问题很可能是cat /dev/urandom | base64 | head -c 2不生成十六进制数。请尝试这种方式:

random=$(cat /dev/urandom | head -c 1 | xxd -p)

而不是使用cathead,只使用xxd会更简单,更清晰(感谢@kojiro提示!):

random=$(xxd -p -l1 < /dev/urandom)

答案 1 :(得分:0)

怎么样

random=$(printf "%02x\n" $((RANDOM % 256))) # zsh and bash

顺便说一句,如果你不需要十六进制数小于10的前导零,并且如果可以使用Zsh而不是bash,你也可以用以下方式做,这不需要{ {1}}子流程:

$(...)