尝试将用户输入的短语循环一定次数,该次数也由用户输入。继续得到预期的错误整数表达式,我不知道如何修复它。
#!/bin/sh
echo "What do you want to say?"
read phrase
echo "How many times?"
read num
while [ "num" -ge 0 ]
do
echo $phrase
num='expr num - 1'
done
答案1
您需要使用 a$
来扩展 bash 中的变量,除非它位于(( ))
.您正在将文字字符串“num”与数字 0 进行比较。使用以下选项之一:
while [ "$num" -ge 0 ] # POSIX
while (( num >= 0 )); # bash
答案2
一些更正。
#!/bin/sh
echo "What do you want to say?"
read phrase
echo "How many times?"
read num
while [ $num -gt 0 ];
do
echo $phrase
let num='num - 1'
done
例子
$ ./cmd.bash
What do you want to say?
hi
How many times?
4
hi
hi
hi
hi
您可以使用此表示法使重新计算$num
更加简化且更易于阅读。
更改这一行:
let num='num - 1'
有了这个:
( num-- ))
何时使用或不使用变量$
表示法会让人感到困惑,通常您需要查阅手册页bash
以及test
何时进行此类工作。如果您使用的bash
不仅仅是 native sh
,那么此更改是合适的。
细节
$num
在循环控制部分执行边界检查时,需要使用变量形式while
。- 使用
let
而不是expr
. - 循环的界限包括 0 步骤,
-ge
这将给你比你想要的多 1 的结果。
例子
通过while
使用循环绑定检查,-gt
您将得到以下结果:
$ ./cmd.bash
What do you want to say?
hi
How many times?
2
hi
1
hi
0
如果你使用你的,-ge
你会得到这样的行为:
$ ./cmd.bash
What do you want to say?
hi
How many times?
2
hi
1
hi
0
hi
-1