Shell脚本循环,以十六进制递增

时间:2012-08-23 21:55:06

标签: shell

for num in {3758145536..3758149632..4}
do
    echo "obase=16; $num" | hexnum
    peek -lt $hexnum > "/luascript/dumpfileA"
done

我想要做的是,从address0xe000000迭代到0xe0001000 使用peek来查看这些部分内存并将结果写入文件。

所以我使用Deceimal做增量工作。然后转换为十六进制。

也许,我可以直接增加十六进制吗?

但这不起作用。 需要帮忙 谢谢!

3 个答案:

答案 0 :(得分:4)

(我假设您正在使用bash)。

通常,bash只允许您在基数10中输入数字文字。您可以在算术上下文中使用其他基数(例如,在((...))内),但它将以其基数10表示形式显示。但是,您可以使用printf内置快速转换为十六进制表示。

for (( num=0xe0000000; num <= 0xe0001000; num+=4 )); do
    peek -lt $( printf "%x" $num ) >> /luascript/dumpfileA
done

答案 1 :(得分:0)

如果您使用的是zsh,则可以执行以下操作(请注意c_bases需要设置为0x前面的$num}:

setopt c_bases
typeset -i 16 num
for num in $( seq $((0xe000c000)) 4 $((0xe000d000)) ); do 
  echo "peek -lt $num > /luascript/dumpfileA"
done | head

输出:

peek -lt 0xE000C000 > /luascript/dumpfileA
peek -lt 0xE000C004 > /luascript/dumpfileA
peek -lt 0xE000C008 > /luascript/dumpfileA
peek -lt 0xE000C00C > /luascript/dumpfileA
peek -lt 0xE000C010 > /luascript/dumpfileA
peek -lt 0xE000C014 > /luascript/dumpfileA
peek -lt 0xE000C018 > /luascript/dumpfileA
peek -lt 0xE000C01C > /luascript/dumpfileA
peek -lt 0xE000C020 > /luascript/dumpfileA
peek -lt 0xE000C024 > /luascript/dumpfileA

当您对输出感到满意时,请移除headecho和引文。

答案 2 :(得分:0)

这么简单!使用此:

bc <<< "obase = 16 ; $(seq 0 65536)"