Bash脚本出错 - 语法错误

时间:2011-02-20 20:18:21

标签: bash

文件:test.sh

命令:sh test.sh

test.sh的内容

   x=1
    while [ $x -le 5 ]
    do
      echo "Welcome $x times"
      x=$(( $x + 1 ))
    done

错误:

  

test.sh:第6行:语法错误附近   意外的令牌“完成”

     

test.sh:第6行:“完成”

GNU bash,版本3.2.39(1)-release(x86_64-pc-linux-gnu)

4 个答案:

答案 0 :(得分:1)

当我运行该代码时,它会起作用。

确保您使用 bash 而非 sh 运行。 $(( ))构造相对较新。

答案 1 :(得分:1)

使用以下命令运行脚本:

bash test.sh

它会起作用。主要有两种可能性:

  • 当它以sh运行时,bash不一定会识别它作为bash运行时识别的所有语法。但是,在我测试过的Linux和MacOS X计算机上,shbash都运行良好。
  • 或者,您可能位于运行AIX,HP-UX,Solaris或类似设备的计算机上,其中/bin/shbash的shell完全不同。它是更严格的Bourne shell,您使用的符号无效 - 语法错误。

答案 2 :(得分:0)

我的系统很奇怪。

Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times

必须与空格有关。

答案 3 :(得分:0)

向分号问好。 :)

x=1
while [ $x -le 5 ]
do
  echo "Welcome $x times";
  x=$(( $x + 1 ));
done

如果它是一行,则不需要分号,但是,您可能希望以这种方式循环:

for i in `seq 1 5`
do
  echo "Welcome $i times"
done