昨天晚上加了个数据库自动备份的FTP脚本:backup.sh,设置了凌晨6点自动备份数据至某个FTP空间,结果今天早上来的时候发现FTP上根本没有备份的数据库文件,难道是脚本有问题?于是执行测试了一下,结果还真的执行失败,提示-bash: ./backup.sh: /bin/bash^M: bad interpreter: No such file or directory,这就怪了,这个backup.sh明明就在home目录里:
[root@hqw home]# ll
total 24
-rwxr-xr-x 1 root root 1670 Mar 11 20:29 backup.sh
drwxr-xr-x 2 root root 4096 Mar 11 19:52 cert
drwx------ 2 www www 4096 Mar 8 17:26 www
drwxrwxrwx 2 root root 4096 Mar 8 17:33 wwwlogs
drwxrwxrwx 6 root root 4096 Mar 12 16:40 wwwroot
[root@hqw home]# ./backup.sh
-bash: ./backup.sh: /bin/bash^M: bad interpreter: No such file or directory
这是怎么回事???
找到解决方法了,在此分享记录一下:
第一步:使用下述命令看看该文件的格式,dos格式的文件行尾为^M$,unix格式的文件行尾为$。
命令行:cat -A xxx.sh
END[root@hqw home]# cat -A backup.sh
#!/bin/bash^M$
#M-dM-=M- M-hM-&M-^AM-dM-?M-.M-fM-^TM-9M-gM-^ZM-^DM-eM-^\M-0M-fM-^VM-9M-dM-;M-^NM-hM-?M-^YM-iM-^GM-^LM-eM@M-eM<M-^@M-eM-'M-^K^M$
MYSQL_USER=root #mysqlM-gM-^TM-(M-fM-^HM-7M-eM-^PM-^M^M$
果然是^M$结尾的,说明格式不正确。
第二步:使用下述命令直接替换结尾符为unix格式
命令行:sed -i “s/\r//” xxx.sh
[root@hqw home]# sed -i “s/\r//” backup.sh
第三步:再次使用 cat -A xxx.sh 命令查看是否已经更改为unix格式
[root@hqw home]# cat -A backup.sh
#!/bin/bash$
#M-dM-=M- M-hM-&M-^AM-dM-?M-.M-fM-^TM-9M-gM-^ZM-^DM-eM-^\M-0M-fM-^VM-9M-dM-;M-^NM-hM-?M-^Y@M-eM-iM-^GM-^LM-eM-<M-^@M-eM-'M-^K$
说明已经改过来了!
再次执行:
[root@hqw home]# ./backup.sh
成功了!!!