Cygwin错误时,如果…然后… fi – Bash脚本

我刚开始bash shell编程。 我已经在我的Windows 7电脑上安装了Cygwin。 我开始使用本教程编写脚本。 我的脚本需要一个parameter passing给它,如果它不应该显示一个错误消息。 这是直接来自教程的代码和我的代码中的代码:

[ $# -eq 0 ] && { echo "usage: someArgument"; exit 1; } 

当我做到以下几点:

 sh ./myscript.sh 

它给了我这个错误:

 -bash: /home/Me/myscript.sh: line 5: syntax error: unexpected end of file 

“意外的文件结束”意味着我错过了某个地方的某个地方或某个地方。

我仔细检查了我的代码,但什么都没发现。 另外,当我注释掉脚本时,脚本工作得很好。

我试着用if...then...fi

 if [ $# -eq 0 ] then echo "usage: someArgument" exit 1; fi 

但无济于事!

请帮忙,这一直在困扰着我。

脚本中可能有\r或其他一些不可见的符号。 请在脚本的开始处添加set -x以切换调试并再次运行脚本。

抱歉,添麻烦了。 我对伊戈尔提到的不可见符号做了一些研究。 你必须在Cygwin中运行dos2unix ,它为我解决了这个问题。 DOS类型的文件有\r\n而不是\n和其他一些使Cygwin困惑的东西。

这个:

 $ dos2unix ./myscript.sh $ sh ./myscript.sh 

工作正常。

作为替代,您可以使用bash参数扩展来测试未设置的变量。 没有位置参数, $1将被取消设置:

 : ${1?"usage: someArgument"} 

:命令是一个空操作,用作扩展其参数的钩子,即$1 。 如果$1未设置, 将经历一些扩展并被打印到标准错误,之后非交互式外壳将退出。

(这不是解决DOS行结束问题的办法,而只是强制设置变量的另一种方法。)