Bash错误:“第8行:[:2:一元运算符预期”

时间:2016-04-23 17:55:03

标签: bash shell

请帮我解决我在Bash中使用shell脚本收到的错误: line 8: [: 2: unary operator expected

#!/bin/bash

echo "Input your number for factorial calculation: "
read $nr

counter=2
factorial=1

while [ $counter -le $nr ]
do
 factorial=$(( $factorial * $counter ))
 counter=$(( $counter + 1 ))
done

echo "The result " $nr "! is:"
echo $factorial

while行出了点问题。可能$nr未正确使用?

2 个答案:

答案 0 :(得分:3)

read获取变量的名称,而不是其值。您需要将read $nr替换为read nr

答案 1 :(得分:1)

您似乎无法格式化问题,因此我无法看到它,但如果您有类似if [ $a -ne $b ]$a$b之一,则通常会收到该错误空的,所以基本上解释器会看到像if [ -ne $b ]这样的东西。他们避免它的方法是

  1. 确保在此类测试之前设置变量,或
  2. 引用变量,因此即使是空的或未定义的变量也会被视为空字符串。虽然此时你只能使用字符串,而不是数字比较。 if [ "$a" != "$b" ]