我对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
答案 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