Skip to content

20.23 如何在命令行上循环执行某条命令

https://scz.617.cn/unix/201205091722.txt

Q:

我想观察一下Linux ASLR的效果,一般会这样干:

$ cat /proc/self/maps | grep stack bf93b000-bf950000 rw-p bf93b000 00:00 0 [stack] $ cat /proc/self/maps | grep stack bfb55000-bfb6b000 rw-p bfb55000 00:00 0 [stack] $ cat /proc/self/maps | grep stack bfadf000-bfaf4000 rw-p bfadf000 00:00 0 [stack]

从中可以看出stack地址确实被随机化了。但这样手工执行3次同样的命令,太蠢了。 有什么办法在命令行上循环执行某条命令?

A: scz@nsfocus

$ for i in seq 0 1 5;do echo $i;done 0 1 2 3 4 5

$ for i in $(seq 0 2 8);do echo $i;done 0 2 4 6 8

seq FIRST INCREMENT LAST

"man seq"了解更多细节。

$ for i in seq 0 1 2;do cat /proc/self/maps | grep stack;done bfb4d000-bfb62000 rw-p bfb4d000 00:00 0 [stack] bfe1a000-bfe2f000 rw-p bfe1a000 00:00 0 [stack] bfe20000-bfe36000 rw-p bfe20000 00:00 0 [stack]

D: lzx

$ for i in {0,1,2};do echo $i;done 0 1 2 $ for i in 0 1 2;do echo $i;done 0 1 2

A: zd@nsfocus

这个最高效:

$ for ((i=0;i<3;i++));do echo $i;done 0 1 2

$ for ((i=0;i<6;i+=2));do echo $i;done 0 2 4