CRLF line terminators导致shell脚本报错:command not found

Linux和Windows文本文件的行结束标志不同。在Linux中,文本文件用"/n"表示回车换行,而Windows用"/r/n"表示回车换行。有时候在Windows编写shell脚本时需要注意这个,否则shell脚本会报"No such file or directory"或"command not found line x"之类的错误,如果不知晓前因后果,肯定会被这个折腾得相当郁闷。如下所示test.sh

[[email protected] myscript]# more test.sh 
. /home/oracle/.bash_profile

echo ‘ ‘

date

echo ‘ ‘

 

sqlplus test/test @/home/oracle/scripts/test.sql

 

echo ‘ ‘

date

echo ‘ ‘

执行test.sh脚本过程中报" No such file or directory /home/oracle/.bash_profile" 和"command not found line xx". 如果你从shell脚本语法方面去检查,根本没有任何问题。不知具体原因的肯定相当郁闷。

[[email protected] myscript]$ ./test.sh
 

: No such file or directory /home/oracle/.bash_profile

 

: command not found line 2: 

 

: command not found line 4: date

 

: command not found line 6: 

 

: command not found line 7: 

如果你用file命令查看test.sh,你会发现文件编码为ASCII,with CRLF line terminators。我们用cat -v test.sh 可以看到^M (\r的十六进制为0D,对应的控制符为^M)。 cat -v可以看到文件中的非打印字符。

[[email protected] myscript]# 
[[email protected] myscript]# file test.sh 

test.sh: ASCII text, with CRLF line terminators

[[email protected] myscript]# cat -v test.sh 

. /home/oracle/.bash_profile^M

echo ‘ ‘^M

date^M

echo ‘ ‘^M

^M

sqlplus test/test @/home/oracle/scripts/test.sql^M

^M

echo ‘ ‘^M

date^M

echo ‘ ‘^M

[[email protected] myscript]# 

vi命令查看test.sh文件看不到^M, 其实这个跟vi的版本有关系。有些版本vi显示的是行尾为^M(AIX下都是显示^M)。而有些vi打开时可以看到底下有[dos]的格式提示。

我们可以用file命令对比正常的shell脚本的格式和编码。如下所示

[[email protected] myscript]$ file myshell.sh
 

myshell.sh: Bourne-Again shell script text executable

解决这个问题其实也不难,有很多方式,例如直接使用vi编辑器编写shell脚本;使用cat命令创建shell脚本,然后从Windows文本工具里面拷贝脚本过来;最方便的还是使用dos2unix将DOS格式文本文件转换成Unix格式或Linux格式。

时间: 2024-10-22 13:54:10

CRLF line terminators导致shell脚本报错:command not found的相关文章

shell脚本报错:"[: =: unary operator expected"

shell脚本报错:"[: =: unary operator expected" md5_109a="81ab961153b62d207f0f517048881b5d" md5_109b=`md5sum install.bin|awk '{print $1}'` if [ $md5_109a != $md5_109b ] 原因,当文件install.bin不存在时, $md5_109b为空这样对比字符串就变成了 if [ 81ab961153b62d207f0f5

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下

Shell脚本报错:-bash: ./switch.sh: /bin/bash^M: bad interpreter: No such file or directory

在学习shell中测试case参数命令代码如下 #!/bin/bash #switch测试 case $1 in     start)         echo 'start'     ;;     stop)         echo 'stop'     ;; esac 在给当前shell脚本赋予了执行权限之后,执行报错代码如下 [[email protected] sh]# ./switch.sh stop -bash: ./switch.sh: /bin/bash^M: bad inte

shell脚本报错

早几天在pc电脑写了一个shell脚本,用来执行springboot项目,然后在centos7执行的时候报错,脚本如下比较简单:start.sh,下面只是列举了一部分脚本代码 2.拷贝脚本到linux服务器执行报如下错误: -bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory 后面查了下资料报错原因是: 我的start.sh的格式显示为:fileformat=dos start.sh是我在windows

shell脚本报错:-bash:/bin/sh^M: bad interpreter:

今天写了一个shell脚本,然后在执行的时候报错,如下截图: 主要原因是shell文件是我在windows下编辑然后上传到linux系统里执行的.shell文件的格式为dos格式.而linux只能执行格式为unix格式的脚本. 我们可以通过vi编辑器来查看文件的format格式.步骤如下: 1.首先用vim命令打开文件 2.在vi命令模式中使用 :set ff 命令 可以看到改文件的格式为dos: 3.修改文件format为unix,使用vi修改文件format,命令:set ff=unix 执

更新浏览器,导致编写脚本报错Message: Unable to find a matching set of capabilities

卸载更新浏览器后,所编写的脚本无法运行,报如下的错误:selenium.common.exceptions.WebDriverException: Message: Unable to find a matching set of capabilities 百度查看问题,所示版本号不对,,一下是相关软件的版本号,没看出什么毛病.问题出在:应该将火狐浏览器驱动添加到火狐浏览器安装目录下,并且将火狐浏览器安装目录放在path下面.(出现大意,忘了在火狐浏览器下放其对应的驱动) geckodriver

Oracle 11g安装GI后,运行roothas.pl脚本报错libcap.so.1找不到

环境:RHEL6.4 + Oracle 11.2.0.3问题:需求是文件系统迁移到ASM,在安装GI后,运行roothas.pl脚本报错 1.运行root.sh后,按提示运行roothas.pl报错: [[email protected] mnt]# /u01/app/11.2.0/grid/crs/install/roothas.pl Using configuration parameter file: /u01/app/11.2.0/grid/crs/install/crsconfig_p

解决:在Eclipse中运行monkeyrunner脚本报错: IOError: (2, 'File not found - D:\\workspace\\monkeyrunner_test01 (\u62d2\u7edd\u8bbf\u95ee\u3002)')

在eclipse中搭建运行monkeyrunner脚本的环境,请见lynnLi的博客monkeyrunner之eclipse中运行monkeyrunner脚本之环境搭建(四) 但在实践中,状况确实层出不穷,首先我搭建好环境后,运行了一个简单的脚本,没想到抛出了错误. IOError: (2, 'File not found - D:\\workspace\\monkeyrunner_test01,说明没有在我们配置的路径下找到相应的脚本. 我们点击Run-External Tools-Exter

loadrunner回放脚本报错27780:“[10053] 软件导致连接中止”

录制的脚本在回放时报错,错误如下: vuser_init.c(12): 警告 -26627: 对于“http://bsp.paycenter.58.com.cn/favicon.ico”,HTTP 状态代码=404 (Not Found)      [MsgId: MWAR-26627]vuser_init.c(12): web_url("login") 最高严重级别为“warning”,140318 个正文字节,2388 个标头字节,24 个成块开销字节      [MsgId: M