做的时候Cygwin错误...然后... fi - Bash脚本

时间:2012-07-15 06:38:35

标签: linux bash shell if-statement cygwin

我刚开始使用bash shell编程。我在Windows 7计算机上安装了Cygwin。我开始使用this tutorial编写脚本。我的脚本需要传递一个参数,如果它没有显示错误消息。这是直接来自教程的代码和我的代码中的相同代码:

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

当我执行以下操作时:

sh ./myscript.sh

它给了我这个错误:

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

"文件意外结束"意味着我错过了fidone等等。

我仔细检查了我的代码,但发现没有。另外,当我对该行进行注释时,脚本的工作完全正常。

我尝试使用if...then...fi

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

但无济于事!

请帮助,它一直在困扰我。

3 个答案:

答案 0 :(得分:5)

您可能在脚本中有\r或其他一些不可见的符号。请将set -x添加到脚本的开头以打开调试并再次运行脚本。

答案 1 :(得分:5)

对不起,不好意思。我对伊戈尔提到的隐形符号进行了一些研究。你必须在Cygwin中运行dos2unix,它为我解决了它。 Dos类型的文件有\r\n而不是\n以及其他一些让Cygwin感到困惑的东西。

此:

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

正常工作。

答案 2 :(得分:1)

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

: ${1?"usage: someArgument"}

:命令是一个空操作,用作扩展其参数的钩子,$1。如果未设置$1,则?后面的单词将进行一些扩展并打印到标准错误,之后将退出非交互式shell。

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