0

我写了这段代码:

echo -n "Enter a number1  "
echo -n "Enter a number2  "
read R1
read R2

while [ "$R1" < "$R2"]
do 
if [ $((R1 % 2)) -eq 0 ]; then

$R3=$R1

    echo "Number is $R3"
else
    echo "Nothing"
fi

done

我不明白为什么它总是给我这个错误 bash: 8]: No such file or directory

4

2 回答 2

1

之后发生的事情< "$R2"被解释为 "$R2". 由于您没有具有这样名称的文件,因此它会抱怨。

[(测试命令)命令没有<运算符。您必须-lt改用:

while [ "$R1" -lt "$R2" ]

有一个 POSIX 扩展,它用斜杠支持它:

while [ "$R1" \< "$R2" ]

如果你使用 bash 你 bash 那么你也可以使用内置的[[ ..]]支持<>

while [[ "$R1" < "$R2" ]]

也可以看看:

test, [ 和 [[ 有什么区别?


重新编写代码以将循环放入内部 if后:

#!/bin/bash
echo -n "Enter a number1  "
read R1
echo -n "Enter a number2  "
read R2

if [[ "$R1" < "$R2" ]]
then
  for((i=R1;i<R2;i++));
  do
    if [[ $((i % 2)) -eq 0 ]]; then
      echo "Number is $i"
    fi
  done
else
    echo "Nothing"
fi
于 2013-10-10T10:10:48.150 回答
1

您应该使用-lt而不是<.

while [ "$R1" -lt "$R2" ]

<在 bash 中被解释为输入重定向。

或者您可以使用双方括号将其中的内容解释为算术运算:

while [[ "$R1" < "$R2" ]]
于 2013-10-10T10:08:45.247 回答