2015-09-07 105 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