2015-09-07 45 views
2

我需要读取用户的输入(N)并执行循环N来执行一组语句。在bash,我可以使用下面的for循环语法:Bash和Korn shell中的Bash-like循环?

read N 
for((i=0;i<$N;i++)) 
set of statements 

但是,我不能用在外壳如shksh这句法。相反,我该怎么做?

回答

3

如果您的脚本必须与Bourne shell(sh)兼容,请注意后者不提供数字“类似C”的for循环语法(for((i=0;i<$N;i++)))。但是,您也可以使用while循环。

这里是一个符合POSIX标准的做法,如预期既shksh其工作原理:

read N 

i=0     # initialize counter 
while [ $i -lt $N ] 
do 
    printf %s\\n "foo" # statements ... 
    i=$((i+1))   # increment counter 
done 

测试:

$ sh test.sh 
3 
foo 
foo 
foo 
$ ksh test.sh 
4 
foo 
foo 
foo 
foo 
$ dash test.sh # (dash is a minimalist, POSIX-compliant shell) 
2 
foo 
foo 
+0

谢谢,这确实有帮助... –

+2

无需使用'expr'; '我= $((i + 1))'符合POSIX标准。 – chepner

+0

@chepner你说得对。谢谢。 – Jubobs