脚本调试:一次换行符导致的报错

本文介绍了一种在Windows环境下使用Notepad编辑Shell脚本导致语法错误的情况,并提供了几种解决方案,包括如何使用Vim替换命令去除换行符及使用其他工具去除^M字符。

今天早上用notepad写了个简单脚本,如下:

1
2
3
4
5
6
7
[root@master ~] # vim /wanwan/nginx_limits.sh 
#!/bin/bash
#nginx max open files-nums
for  pid  in  $( ps  aux | grep  nginx| grep  - v  grep  | awk  '{print $2}' )
do
cat  /proc/ ${pid} /limits  grep  'Max open files'
done

调试的时候居然报错,如下:

1
2
3
[root@master ~] # bash /wanwan/nginx_limits.sh 
'wanwan /nginx_limits .sh: line 4: syntax error near unexpected token ` do
'wanwan /nginx_limits .sh: line 4: ` do

突然想到,可能是因为在windows下编辑的额,继续排查

wKioL1m3N0jAoT_ZAAAlUCrlbQ4537.png

使用vim -b进行编辑,发现文件每一行后面都多了一个

解决方法:

1
2
3
4
5
6
7
在Vim中解决这个问题,很简单,在Vim中利用替换功能就可以将“^M”都干掉,键入如下替换命令行:
  1) vi  -b setup.sh
  2)在命令编辑行<就是: 按ESC键 然后 shift +:冒号>输入:%s/^M //g
  注意:上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+ v ”、“Ctrl+M”键生成
  这样替换掉以后,保存就可以执行了。当然还有其他的替换方式比如:
  a.一些linux版本有 dos2unix 程序,可以用来祛除^M。
  b. cat  filename1 |  tr  -d  "/r"  > newfile 去掉^M生成一个新文件

再次查看文件的信息:

wKiom1m3OUaCMuSJAAAsPE-8Ls0494.png

我们发现换行符已经没有了,执行下脚本:

wKioL1m3OWGiu5N5AAAhoBDmbXA005.png

到此,完成











本文转自 冰冻vs西瓜 51CTO博客,原文链接:http://blog.51cto.com/molewan/1964504,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值