如何在ksh中使用for循环迭代一小部分整数?
例如,我的脚本目前正在执行此操作...
for i in 1 2 3 4 5 6 7
do
#stuff
done
...但我想将范围扩展到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