我需要读取用户的输入(N
)并执行循环N
次以执行一组语句。在bash
中,我可以使用以下for循环语法:
read N
for((i=0;i<$N;i++))
set of statements
但是,我无法在sh
或ksh
等shell中使用该语法。我该怎么做呢?
答案 0 :(得分:3)
如果您的脚本必须与Bourne shell(sh
)兼容,请注意后者不提供数字,“C-like”for循环语法(for((i=0;i<$N;i++))
)。但是,您可以使用while
循环。
以下是符合POSIX标准的方法,可以按预期使用sh
和ksh
:
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