写入意外令牌'完成'附近的语法错误

时间:2015-07-13 20:31:08

标签: linux bash

我对done有疑问。 它说我有一些拼写错误,但我无法弄清楚什么是错的。 这是代码:

#./bin/bash
until [$err == 0];
do
    java -Xms512m -Xmx512m -cp lib/*:lib/uMad/*:mysql-connector-java-5.1.15-bin.jar:l2jfrozen-core.jar com.l2jfrozen.gameserver.GameServer
    err=$?
    sleep 5
done

2 个答案:

答案 0 :(得分:2)

您的shebang行错了。 #./bin/bash不会执行bash。

应该阅读#!/bin/bash。您可能正在使用bash之外的shell来调用此脚本。

另外,请注意[$err == 0]行会扩展$err的值,这可能是一个空字符串,除非它已导出。如果它为空,这将导致错误,因为Bash将解释[ == 0]

最安全的方法是:

unset err
until [ "$err" == "0" ];
do
    # etc...
done

答案 1 :(得分:0)

根据我使用括号和if循环的经验,您需要适当的间距和双倍,而不是单个括号。除了分号外,双支架的每一侧都需要有空间。这是一个示例块:

#!/bin/bash

err=5
until [[ $err == 0 ]]; do
    ((err-=1));
    echo -e "$err\n";
    sleep 3
done

我不明白为什么同样不适用于do until循环。

你可能已经意识到了,但是你的标题有一段时间而不是一个shebang。

#./bin/bash