在Windows系统上编写了Shell脚本,运行的时候出现问题:

root@orangepione:/mnt/nfs_server/orangePi# ./backup.sh

bash: ./backup.sh: /bin/bash^M: bad interpreter: No such file or directory

从错误的意思上貌似是:/bin/bash执行的时候遇到了^M字符,这个字符中断了Shell脚本的执行,或者说这个字符无法被Shell执行所以报错了。网上一查知道了这个^M字符其实是\r回车符,恍然大悟原来是这样的,在Windows上编写代码的时候代码或者脚本的时候敲击回车键时其实输入的是 \r \n两个字符,分别叫做回车符和换行符,然而,在Linux系统为了节省存储空间,敲击回车键时只输入\n换行符,所以Windows和Linux系统上的文档中的换行是不一样的,如下:

new line of dos/win: 0X0d0a
new line of linux/unix: 0X0a

Linux上编写的文档在Windows上打开全是一行,而Windows上编写的文档在Linux下打开是没有问题的,因为\r是不可显示的字符,故不影响显示,但是当执行脚本的时候就会有问题,bash不认识\r,会将\r字符当成命令进行处理所以出现错误。

解决办法是将\r即那个万恶的^M字符删除掉,有若干种方法

1、dos2unix工具,默认系统没有安装,使用命令 apt-get install dos2unix 安装,使用方法 dos2unix backup.sh

2、在Linux的vi编辑器下输入:set ff=unix ,保存即可。

3、 不知道