bash 期望的整数表达式

bash 期望的整数表达式

尝试将用户输入的短语循环一定次数,该次数也由用户输入。继续得到预期的错误整数表达式,我不知道如何修复它。

#!/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,那么此更改是合适的。

细节

  1. $num在循环控制部分执行边界检查时,需要使用变量形式while
  2. 使用let而不是expr.
  3. 循环的界限包括 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

相关内容