【问题标题】:Bash script syntax error "do"?Bash脚本语法错误“做”?
【发布时间】:2014-07-14 16:47:09
【问题描述】:
#!/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 样式 CR/LF。你可以做到,echo myscript.sh | od -c 在角色上达到顶峰。逗号也是个问题。见cyberciti.biz/faq/bash-for-loop
  • 去掉逗号!
  • @IAmYourFaja - 输出的第二行打印了\r,它将光标移回m 所在的位置并打印了',因此输出很奇怪。尝试运行dos2unix myscript.sh。这应该将 CRLF 转换为 \nfile myscript.sh 会告诉你 myscript.sh 是什么类型的文件。 cat -veT myscript.sh 将打印 myscript.sh 的内容,包括不可打印的字符。

标签: linux bash shell


【解决方案1】:

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

下载Notepad++ 编辑器,它在Edit / EOL Conversion 下有一个unix 样式的行尾选项。

【讨论】:

    【解决方案2】:

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

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

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

    要在 CentOS、FedoraRHEL 上安装它:

    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
    

    【讨论】:

      【解决方案3】:

      你忘了分号:

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

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

      【讨论】:

      • 感谢@d33tah (+1) - 但仍然是同样的错误。有任何想法吗?我觉得有趣的是第二行输出有yscript而不是myscript...
      • @IAmYourFaja 你在文件中有一些不可见的控制字符。如果您将输入的问题复制/粘贴到脚本中,它可能会起作用。
      • @d33tah 你不需要分号。换行符会处理它。在这种情况下,repoArepoBrepoC 被视为文字。 repo 的值依次设置为 each。
      • 这还是不行;我将您答案中的原始文本复制/粘贴到我的脚本中,并在我的问题中得到了与上面相同的输出。我在使用 Cygwin 的 Windows 7 上,这可能是罪魁祸首吗?
      • @IAmYourFaja 你用的是什么编辑器?我相信它正在使用 CR/LF 以“DOS”格式写出文件。检查使用 Linux/Unix 样式文本的选项。
      猜你喜欢
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 2012-03-24
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多