通过ksh中的一系列整数进行迭代?

时间:2009-10-19 20:56:34

标签: shell ksh

如何在ksh中使用for循环迭代一小部分整数?

例如,我的脚本目前正在执行此操作...

for i in 1 2 3 4 5 6 7
do
   #stuff
done

...但我想将范围扩展到7以上。有更好的语法吗?

7 个答案:

答案 0 :(得分:37)

卷曲括号?

for i in {1..7}
do
   #stuff
done

答案 1 :(得分:15)

while loop?

while [[ $i -lt 1000 ]] ; do
    # stuff
   (( i += 1 ))
done

答案 2 :(得分:10)

ksh93 ,Bash和zsh都理解类C for循环语法:

for ((i=1; i<=9; i++))
do
    echo $i
done

不幸的是,当 ksh 和zsh理解带有常量和变量的大括号范围语法时,Bash只处理常量(包括Bash 4)。

答案 3 :(得分:8)

在OpenBSD上,使用jot:

for i in `jot 10`; do echo $i ; done;

答案 4 :(得分:5)

以下内容适用于AIX / Linux / Solaris ksh。

#!/bin/ksh

d=100

while (( $d < 200 ))
do
   echo "hdisk$d"
  (( d=$d+1 ))
done

如果您想要填充到5个位置,例如00100 .. 00199,您可以选择:

#!/bin/ksh
typeset -Z5 d

-Scott

答案 5 :(得分:4)

seq - 但只能在linux上使用。

for i in `seq 1 10`
do 
    echo $i
done

seq还有其他选项。但其他解决方案非常好,更重要,便携。谢谢

答案 6 :(得分:1)

我在AIX中使用的几个例子,因为没有范围运算符或seq,而是滥用perl。

这是一个for循环,使用像seq这样的perl:

for X in `perl -e 'print join(" ", 1..10)'` ; do something $X ; done

这是类似的,但我更喜欢读取循环。没有反复或空格问题。

perl -le 'print "$_ " for 1..10;' | while read X ; do xargs -tn1 ls $X ; done

我最喜欢的,做类似bash的shell globbing,在这种情况下使用perl进行排列。

perl -le 'print for glob "e{n,nt,t}{0,1,2,3,4,5}"' | xargs -n1 rmdev -dl