linux的shell脚本报错“syntax error near unexpected token `”的解决

今天写了一个shell脚本,老报错检查了一下基本的语法并没有发现错误。后来经过百度解决掉了,现总结如下。

错误现象:执行shell脚本,老报错“syntax error near unexpected token `”

解决办法:vim -b example.sh打开文件,发现文件每一行的末尾多了一个^M,这个问题在使用vim example.sh查看是看不见的,只能通过报错来判断使用vim -b才能发现问题。

因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下用VC写的代码,行尾后的“^M”符号,表示的是符。

  在Vim中解决这个问题,很简单,在Vim中利用替换功能就可以将“^M”都干掉,键入如下替换命令行:

  1)vi -b setup.sh

  2)在命令编辑行<就是: 按ESC键 然后shift+:冒号>输入:%s/^M//g

  注意:上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”键生成的。

  这样替换掉以后,保存就可以执行了。当然还有其他的替换方式比如:

一些linux版本有 dos2unix 程序,可以用来去除^M。

错误原因:写脚本时,先使用了UltraEdit编辑好了脚本,然后存在了版本是windos的电脑上,随后传输到linux系统内去执行的。可能是存储文本时启用了默认的DOS格式。

时间: 2024-10-05 18:05:18

linux的shell脚本报错“syntax error near unexpected token `”的解决的相关文章

关于报错“syntax error near unexpected token `”和回车换行

本来是很简单一个事情,转过来是因为打字机这事比较有趣-- http://blog.csdn.net/xyp84/archive/2009/08/11/4435899.aspx 摘要一下: 回车 换行 0D 0A <CR> <LF> Carriage Return Line Feed "/r" "/n" win32 0D 0D 0A unix 0D 0A ============淡定的分割线=============== 今天写了个shell脚

执行shell脚本报错 &#39;\357\273\277&#39;: command not found 解决办法

1,删除BOM,在vi下面执行下面的命令即可 :set nobomb 2,原因: 所谓BOM,全称是Byte Order Mark,它是一个Unicode字符,通常出现在文本的开头,用来标识字节序(Big/Little Endian),除此以外还可以标识编码(UTF-8/16/32) 对于UTF-8/16/32而言,它们名字中的8/16/32指的是编码单位是多少位的,也就是说,它们的编码单位分别是8/16/32位,换算成字节就是1/2/4字节,如果是多字节,就要牵扯到字节序,UTF-8以单字节为

shell脚本错误:syntax error near unexpected token &#39;$&#39;\r&#39;&#39;

linux下运行shell脚本出现错误:syntax error near unexpected token '$'\r'' 这是因为文件在编写时的回车是DOS的"\r\n",而正确的应该是"\n",所以需要将文件内所有的"\r\n"替换为"\n",如将1.sh修改另存为2.sh,有以下简单的方法: sed 's/\r//' 1.sh > 2.sh shell脚本错误:syntax error near unexpect

shell脚本启动语法错误syntax error near unexpected token &#39;{

执行shell脚本时失败,报语法错误,但脚本内容检查正常 原因为该脚本是在非Linux系统下编辑之后放到系统执行的,文件模式类型非Linux系统匹配的模式类型. 查看文件的模式类型 显示文件的模式类型为 dos 修改文件的模式类型为Linux匹配的 unix 保存之后即可正常启动脚本. shell脚本启动语法错误syntax error near unexpected token '{ 原文地址:https://www.cnblogs.com/zjfjava/p/10708370.html

运行shell脚本提示“syntax error near unexpected token for((i=0;i&lt;$length;i++))”

sh脚本如下: #!/usr/bin/env bash county="3 4 5 6 7 8 9 10 11 12 16 29 39 44 53 62 72 84 97 115 128 151 168 187 199 218 230 10079 10239 32478" array=($county) length=${#array[@]} for((i=0;i<$length;i++)) do $HIVE_HOME/bin/hive -e "select * fro

shell脚本syntax error near unexpected token `done&#39;

1.修改文件类型 执行: vi finddir.sh 输入 :set ff 如果fileformat=dos ,修改为unix: :set ff=unix 执行保存命令: :wq 2.删除隐藏字符 用命令vi -b 打开你的SHELL脚本文件,你会.发现每行脚本最后多了个^M 因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下用VC写的代码,行尾后的"^M"符号,表示的是符. 在Vim中利用替换功能就可以将"^M"

Linux-006-执行Shell脚本报错 $&#39;\r&#39;:command not found

在 windows 下编写 Shell 脚本,在 Linux 上执行时,报错提示: $'\r':command not found. 因为 windows 下的换行符是 \r\n ,而 Linux 的换行符是 \n.因而在 Linux 下运行 windows 编写的 Shell 脚本,会报如上所示的错误. 解决方法:将换行符替换成 Linux 平台的换行符即可.命令如下所示: sed -i 's/\r//' 脚本名 Linux-006-执行Shell脚本报错 $'\r':command not

Laravel 5.4 migrate报错:Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `us ers_email_unique`(`email`))

Laravel 5.4 migrate报错:Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `us     ers_email_unique`(`email`)) public function up() { Schema::create('users', function (Blu

JS function document.onclick(){}报错Syntax error on token &quot;function&quot;, delete this token

JS function document.onclick(){}报错Syntax error on token "function", delete this token function document.onclick() //任意点击时关闭该控件 //ie6的情况可以由下面的切换焦点处理代替 {    with(window.event)   { if (srcElement != outObject && srcElement != outButton)