Bash脚本语法错误"做"?

时间:2014-07-14 16:47:10

标签: linux bash shell

#!/bin/sh
for repo in repoA, repoB, repoC;
do
    echo Cloning $repo.
done

当我执行此操作(sh myscript.sh)时,我得到以下内容:

myscript.sh: line 2: syntax error near unexpected token `$'\r''
'yscript.sh: line 2: `for repo in repoA repoB repoC;

想法?

3 个答案:

答案 0 :(得分:3)

Windows在每行末尾使用两个字符:'\r''\n'。 Unix只使用'\n'。大概是你在记事本中编辑它并在cygwin中运行它,这就是你得到这个错误的原因。

下载Notepad++编辑器,其中包含Edit / EOL Conversion下的unix样式行结尾选项。

答案 1 :(得分:0)

您的脚本可能是在Windows机器上编写的,包含DOS换行符 CR LF 而不是Unix换行符, LF

所以你只需要转换换行符。

你可以使用各种工具来做到这一点,但我的偏好是 dos2unix

要在 CentOS,Fedora RHEL 上安装它,请执行:

sudo yum install dos2unix 

Ubuntu或Debian 上安装 dos2unix

sudo apt-get install tofrodos
sudo ln -s /usr/bin/fromdos /usr/bin/dos2unix

现在要实际进行转换:

dos2unix your_script.sh

然后运行脚本

sh your_script.sh

答案 2 :(得分:-4)

你忘记了分号:

#!/bin/sh
for repo in repoA repoB repoC;
do
    echo Cloning $repo.
done

请注意,repoA,repoB和repoC在此上下文中被视为变量。