我在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
我想将 4 对 99 更改为我生成的相同随机值,我尝试了这段代码,但我的内脏为 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
问题很可能是cat /dev/urandom | base64 | head -c 2
没有生成十六进制数。请尝试以下方式:
random=$(cat /dev/urandom | head -c 1 | xxd -p)
而不是使用 cat
和 head
,仅使用 xxd
会更简单、更干净(感谢@kojiro提示!
random=$(xxd -p -l1 < /dev/urandom)
怎么样
random=$(printf "%02xn" $((RANDOM % 256))) # zsh and bash
?
顺便说一句,如果你不需要小于 10 的十六进制数字的前导零,并且可以使用 Zsh 而不是 bash,你也可以通过以下方式做,这不需要$(...)
子过程:
random=$(( [##16] (RANDOM & 16#FF) )) # zsh only