【问题标题】:Linux Script Unexpected end of file errorLinux 脚本文件意外结束错误
【发布时间】:2013-03-24 11:18:16
【问题描述】:

我是 shell 脚本的新手。我正在尝试编写一个脚本,该脚本会引发意外的文件结束错误。我在stackoverflow上检查了其他解决方案,但是我无法解决这里。任何帮助,将不胜感激。我的脚本是

if [ "$(/etc/init.d/tomcat7 status)" == " * Tomcat servlet engine is not running." ]; then /etc/init.d/tomcat7 start; fi

按照建议,我尝试在 linux 中创建它,但现在出现错误 [: * Tomcat servlet engine is not running.: unexpected operator

【问题讨论】:

  • 这个脚本是你在linux系统上创建的,还是你在windows上创建然后传输文件的?
  • 这看起来很正常。你确定这是你的全部脚本吗?
  • 是的,这就是所有的脚本。然而,正如 Joni 所说,我在 Windows 上创建了它,然后将其转移到了 linux。
  • == 不是[ 命令的运算符。使用单个= 或使用[[ a == b ]]

标签: linux bash scripting


【解决方案1】:

自从您在 Windows 上创建文件以来,您最初的问题很可能是由于换行符不匹配造成的。 Windows 将换行符编码为 CR-LF,而 Linux/Unix 仅使用 LF,Mac OS 仅使用 CR。你可以用例如解决这个问题

recode ibmpc..latin1 your.sh

您还应该在脚本的第一行指定解释器:

#!/bin/bash

您的脚本可能看起来像这样:

#!/bin/bash
if [ "$(/etc/init.d/tomcat7 status)" == " * Tomcat servlet engine is not running." ]; then
  /etc/init.d/tomcat7 start
fi

【讨论】:

    【解决方案2】:

    当您在 Windows 上编写脚本时,问题很可能是 Windows 上的行尾字符 \r\n 的编码不同,而 Linux 上的单个 \n 编码不同。

    尝试在您的脚本上使用dos2unix 并再次运行它。

    【讨论】:

      【解决方案3】:

      通过查看[ :Unexpected operator in shell programming 解决了这个问题。

      我必须以 bash 而不是 sh 的形式运行它。

      【讨论】:

        猜你喜欢
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-14
        • 2013-06-08
        • 1970-01-01
        • 2022-01-23
        • 2012-02-10
        相关资源
        最近更新 更多