语法错误: 未预期的文件结尾

然后我就在脚本中查找问题,看了一圈好像没什么语法问题呀,然后我就把脚本内容直接粘贴到linux系统中创建的空脚本文件,发现运行正常,这个就很纳闷了,直到我发现nodepad++文件中有不同的行结尾格式

原来是不同操作系统下的行结尾不同

windows系统下,每行的结尾为 \r\n (回车 换行)
linux系统下,每行的结尾为 \n (换行)
max系统下 每行的结尾为 \r (回车)

在nodepad++中如何修改行结尾格式

edit–>EOL Conversion —> Windows Format / UNIX/OSX Format /Old Mac Format

如果在linux中操作的文件使用 UNIX/OSX Format,修改完成后会发现文件底部行结尾格式变成了UNIX
在这里插入图片描述
修改保存后,该脚本放到linux系统中或者放到azkaban调度都是可成功执行的。
所以看到诸如 语法错误: 未预期的文件结尾这种错误,如果排除了语法的问题,需要考虑是否是文件本身的问题。

背景:shell脚本是在nodepad++中写的,写完需要上传到azkaban上进行调度执行在azkaban执行脚本的时候,脚本运行报错语法错误: 未预期的文件结尾然后我就在脚本中查找问题,看了一圈好像没什么语法问题呀,然后我就把脚本内容直接粘贴到linux系统中创建的空脚本文件,发现运行正常,这个就很纳闷了,直到我发现nodepad++文件中有不同的行结尾格式原来是不同操作系统下的行结尾不同windows系统下,每行的结尾为 \r\n (回车 换行)linux系统下,每行的结尾为 行 22: 语法错误: 预期文件结尾。 也许你会发现你的脚本总共也没22行,这是因为:“shell不会对错误进行精确定位,而是在试图结束一个语句时进行错误统计。所以在shell打印出一个脚本错误后,不要只看那些疑问行,而是要观察整个相关代码段.” 2,这个文件如果在wiindow下编写的,要注意编码格式,一种是设置编码为:UTF-8,类似这种 3,另一种是设置UNIX(LF) window,linux苹果三种都不是同的格式, 只有在这三路都确认好的情况下,shell脚本才不会出现在语法错误。。 nodepad++ 右下角 右键就可以转换 [root@linux-01 ~]# mkdir shell [root@linux-01 ~]# cd shell [root@linux-01 shell]# vim 01.sh [root@linux-01 shell]# sh 01.sh 19:20:52 up 15:41, 2 users, load average: 0.00, 0.01, 0.05 USER ... 语法错误: 预期文件结尾。 出现了此错误提示,进行了如下的检查:1、检查Shell脚本语法错误,更正之后再上传Linux系统下运行,错误提示依旧;2、文件结尾删除空行、添加空行;错误提示依旧。3、把shell脚本中的内容直接在命令行中执行,没有问题。 最后的解决方法(简单有效): 从Linux环境下找了一个可以成功执行的Shell脚本,下载到Windows环境下,更改文件名后直接在此 1、因为语法有问题,但问题定位哪一行这个不是很准确,有时候会指向本来就没有的一行。 2、语法没问题,可以注意下文件换行符是不是unix编码(LF)的,如果是windows的编码(CR LF)就会导致执行报上面的错误。 cmddir=”`dirname $0`” 以上这篇shell脚本输出结果记录到日志文件的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:linux中 shell 历史命令记录功能用来记录登录后使用命令的shell脚本PowerShell小技巧之定时记录操作系统行为PowerShell时间记录脚本Powershell小技巧之记录脚本的操作Powershell小技巧之用变量累积记录错
Linux启动提示.bash_profile:行19: 语法错误: 预期文件结尾 这种配置文件基本上应该填写都照着填的,只要仔细检查没问题后,还是提示这句话 可能是在自己Windows电脑上编辑的.bash_profile这个文件 可以看看编辑器上面提示的编码格式 如果是这样,可以在编辑–文档格式转换–转为Unix UTF-8 然后再把文件替换到目标用户下,就可以了