我在bash shell脚本中写了这段代码,但是有错误

时间:2013-10-10 10:00:18

标签: bash unix ubuntu

我写了这段代码:

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]:没有这样的文件或目录

2 个答案:

答案 0 :(得分:1)

您应该使用-lt代替<

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

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

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

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

答案 1 :(得分:1)

< "$R2"被列为 "$R2"读取后,会发生什么。由于你没有这样一个名字的文件,它会抱怨。

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

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

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

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

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

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

另见:

What is the difference between test, [ and [[ ?


重新编写代码后将循环放入 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