dos2unix 文件格式转换 ---解决linux下文本文件的格式导致无法使用shell等

in linux with 0 comment

今天受领导要求要研究squid缓存,想叫我写个用于批量部署时用的自动配置安装脚本,一上午都在看squid反向代理缓存加速方面的文章帖子。下午开始动手写脚本,在windows下的notepad++里面编写的脚本,写了差不多直接通过rz上传到服务器。结果问题来了,怎么执行都不成功。我各种检查脚本都没发现有什么语法问题。结果执行就是报格式有问题,只好再修改,再执行,耽误了不少时间,期间也在百度 google 都没找到关键。

晚上发到技术群里面想叫小伙伴们帮忙执行顺便检查检查我的脚本有没什么错误的,感谢老彭啊,说可能是文件格式有问题,导致shell执行语法格式出错。并叫我安装dos2unix 转换文件格式。果断试了下,再执行最初的脚本,一路顺畅,执行成功。瞬间感慨万分啊。于是写下来以便其他小伙伴们遇到类似的问题。

文本文件在不同平台上使用,会出现一定问题,尤其是在Windows下编辑文件在linux上却无法用shell命令执行。
导致这个问题的原因是不同平台下编辑的文本格式符出现了差异,比如行末:
DOS/Windows/MAC:\r\n,表示成16进制:0D 0A
Unix/Liunx:\n,表示成16进制:0A 所以在linux下打开Windows下编辑的文件会出现:^M,而且很多命令都无法很好的处理这种格式的文件,比如shell脚本。

在此我把我遇到的报错信息展示给大家参考:

脚本部分代码如下

#!/bin/bash
echo "install squid"
sleep 1
check_ok() {
if [ $? != 0 ]
then
echo "it's error.please check the log"
exit 1
fi
}
echo "ulimit -HSn 65536" >> /etc/rc.d/rc.local
echo "echo "1024 40000" > /proc/sys/net/ipv4/ip_local_port_range" >> /etc/rc.d/rc.local
groupadd squid -g 23
useradd -u 23 -g squid -s /sbin/nologin squid
cd /tmp
[ -f squid-3.5.12.tar.gz ] || wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.12.tar.gz
tar -zxvf squid-3.5.12.tar.gz
check_ok
cd squid-3.5.12
./configure --prefix=/usr/local/squid --enable-epoll --enable-htcp --enable-stacktraces --enable-storeio=ufs,aufs,diskd --enable-removal-policies=lru,heap --enable-icmp --enable-default-err-language=Simplify_Chinese --enable-err-languages="Simplify_Chinese English" --enable-cache-digests --enable-auth --enable-auth-basic="NCSA" --enable-useragent-log --enable-referer-log --enable-linux-netfilter --enable-delay-pools --enable-follow-x-forwarded-for --enable-kill-parent-hack --enable-gnuregex --enable-underscore --enable-arp-acl --enable-x-accelerator-vary --disable-ident-lookups --disable-ssl --disable-wccp --disable-internal-dns --disable-mempools --with-default-user=squid --with-pthreads --with-aio --with-large-files --with-filedescriptors=65535 --enable-snm
check_ok
make && make install
check_ok
echo "install is OK,it will config the file"

执行后报错:

It will start install squid
sleep: 无效的时间间隔"1\r"
请尝试执行"sleep --help"来获取更多信息。
'quid-install.sh: line 7: syntax error near unexpected token `{
'quid-install.sh: line 7: `check_ok(){

解决方法:

安装dos2unix

#yum install -y dos2unix

#dos2unix install.sh    //转换文件格式

#sh install.sh      //再次执行发现没有错误了

至此结束。希望可以帮到遇到同样问题的伙伴们。

Responses