Bash 脚本语法错误"do" ?


#!/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;

想法?

Windows在每行的末尾使用两个字符:'r''n'。Unix只使用'n'。假设你是在记事本中编辑它,并在cygwin中运行它,这就是为什么你得到这个错误。

下载notepad++编辑器,它在Edit / EOL Conversion下有一个unix风格的行结尾选项。

您的脚本可能是在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

你忘了一个分号:

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

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

相关内容

最新更新