我试图从终端执行此脚本(通过sh PreStartupCommands.sh
),我的终端窗口出现以下错误:
/home/MinecraftServers/Ephona/serverconfig/PreStartupCommands.sh: line 14: syntax error near unexpected token `fi'
/home/MinecraftServers/Ephona/serverconfig/PreStartupCommands.sh: line 14: `fi'
PreStartupCommands.sh
#!/bin/bash
############################################
########### PreStartupCommands #############
############################################
#
### Update Ephona_sky ###
if [ -f '/home/MinecraftServers/Ephona/Ephona_sky_edit/lock.txt' ] ; then
echo "Lock exists"
else
echo "Lock Does Not Exist"
echo "Copying World ..."
echo "World Copied"
echo "Creating Lock"
fi
对我来说一切都很好。
if
,then
,else
,fi
标记都包含在内答案 0 :(得分:3)
更新:问题原因是脚本文件具有Windows样式的行结尾(\r\n
)而不是bash
- 以及一般的Unix实用程序 - 期待(仅\n
),因为@devnull怀疑。
通常情况下,sh
在CentOS上符号链接到bash
,因此您的脚本应该可以正常工作。
(顺便说一下:任何符合POSIX标准的shell都应该与您问题中的特定示例脚本一起使用
一般警告:正如@Scrutinizer在评论中指出的那样,调用bash
作为sh
意味着行为的细微变化 - 请参阅http://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html(*) - 尽管bashisms仍然有用。)
但是,一般情况下,如果您正在调用bash
脚本,那么使用bash
调用它时概念上更清晰,更安全 - 假设sh
可以已被重新定义以调用不同的shell。
当然,您可以运行chmod +x PreStartupCommands.sh
使您的脚本自行执行,这会使问题消失(假设问题与处理脚本的可执行文件有关)。
(*)在 OSX 上调用bash
作为sh
有其他含义(因为sh
是单独的编译可执行文件而不是那里的符号链接),即默认情况下打开shell选项xpg_echo
,并且在没有$FCEDIT
时使用ed
(不检查$EDITOR
,bash
通常会这样做。