sh 脚本不会运行(文件意外结束),但各行执行正常

sh 脚本不会运行(文件意外结束),但各行执行正常

以下是我尝试在远程计算机上运行的内容,但我收到“意外的文件结尾”。

但是,如果我将这些行粘贴到 CLI 中,它就会正常执行。

# if [ -f running.script ] ; then echo 'Script already running.'
> else echo 'Script not running.' ; touch running.script
<ervers_status | awk 'NR==1 {print $3}' | tr -d '\r')
<ervers_status | awk 'NR==2 {print $3}' | tr -d '\r')
> if [ "$sip1" = 0 ] ; then echo "Sip Server 1 UP" ; fi
> if [ "$sip1" = 1 ] ; then echo "Sip Server 1 DOWN" ; fi
> if [ "$sip1" = 2 ] ; then echo "Sip Server 1 IDLE" ; fi
> if [ "$sip2" = 0 ] ; then echo "Sip Server 2 UP" ; fi
> if [ "$sip2" = 1 ] ; then echo "Sip Server 2 DOWN" ; fi
> if [ "$sip2" = 2 ] ; then echo "Sip Server 2 IDLE" ; fi
> rm running.script
> fi
Script not running.
Sip Server 1 UP
Sip Server 2 IDLE
#sh script.sh
script.sh: line 14: syntax error: unexpected end of file
# cat script.sh
#!/bin/sh
if [ -f running.script ] ; then echo 'Script already running.'
else echo 'Script not running.' ; touch running.script
    sip1=$(cat /var/mand/sipservers_status | awk 'NR==1 {print $3}' | tr -d '\r')
    sip2=$(cat /var/mand/sipservers_status | awk 'NR==2 {print $3}' | tr -d '\r')
    if [ "$sip1" = 0 ] ; then echo "Sip Server 1 UP" ; fi
    if [ "$sip1" = 1 ] ; then echo "Sip Server 1 DOWN" ; fi
    if [ "$sip1" = 2 ] ; then echo "Sip Server 1 IDLE" ; fi
    if [ "$sip2" = 0 ] ; then echo "Sip Server 2 UP" ; fi
    if [ "$sip2" = 1 ] ; then echo "Sip Server 2 DOWN" ; fi
    if [ "$sip2" = 2 ] ; then echo "Sip Server 2 IDLE" ; fi
    rm running.script
fi
#

我在下面包含了 NP++ 的捕获,准确显示了脚本中的内容。

在此输入图像描述

答案1

长话短说

回车低频行结尾需要转换为 Unix如果


我在下面包含了 NP++ 的捕获,准确显示了脚本中的内容。

实际上并不完全如图所示,每行末尾都有一个额外的控制代码。你需要删除那些。

要通过以下方法之一删除 Windows 文件格式:

  • vi file然后输入实际控制的:1,$s/^M/位置并点击then 。^Mvm
  • 安装dos2unix并执行dos2unix file.

相关内容