如何在 ksh 中使用 for 循环遍历一个简单的整数范围?
例如,我的脚本当前执行此操作...
for i in 1 2 3 4 5 6 7
do
#stuff
done
...但我想将范围扩展到 7 以上。有更好的语法吗?
大括号?
for i in {1..7}
do
#stuff
done
while循环?
while [[ $i -lt 1000 ]] ; do
# stuff
(( i += 1 ))
done
ksh93、 Bash 和 zsh 都理解类 Cfor
循环语法:
for ((i=1; i<=9; i++))
do
echo $i
done
不幸的是,虽然ksh和 zsh 理解带有常量和变量的花括号范围语法,但 Bash 只处理常量(包括 Bash 4)。
在 OpenBSD 上,使用 jot:
for i in `jot 10`; do echo $i ; done;
使用seq
:
for i in $(seq 1 10)
do
echo $i
done
以下将适用于 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
-斯科特
我只在 AIX 中使用了几个示例,因为没有范围运算符或 seq,而是滥用 perl。
这是一个 for 循环,使用 perl like seq:
for X in `perl -e 'print join(" ", 1..10)'` ; do something $X ; done
这很相似,但我更喜欢 while read 循环而不是 for。没有反引号或空格问题。
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