![sh 脚本不会运行(文件意外结束),但各行执行正常](https://linux22.com/image/213452/sh%20%E8%84%9A%E6%9C%AC%E4%B8%8D%E4%BC%9A%E8%BF%90%E8%A1%8C%EF%BC%88%E6%96%87%E4%BB%B6%E6%84%8F%E5%A4%96%E7%BB%93%E6%9D%9F%EF%BC%89%EF%BC%8C%E4%BD%86%E5%90%84%E8%A1%8C%E6%89%A7%E8%A1%8C%E6%AD%A3%E5%B8%B8.png)
以下是我尝试在远程计算机上运行的内容,但我收到“意外的文件结尾”。
但是,如果我将这些行粘贴到 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 。^M
v
m
- 安装
dos2unix
并执行dos2unix file
.