sh脚本中变量$的坑
发布日期:2021-09-11 14:30:23 浏览次数:50 分类:技术文章

本文共 877 字,大约阅读时间需要 2 分钟。

hot3.png

最近想写一个shell脚本以解决项目中手动操作的部分工作。

tomcat_home=/data/app/apache-tomcat-6.0.35-portal

SHUTDOWN=$tomcat_home/bin/shutdown.sh
STARTUP=$tomcat_home/bin/startup.sh

如上,不论怎么输出都提示没有文件路径,搞了半天终于发现。$变量其实是,末尾默认加一个/r,将光标移到首位。导致路径出错。

 

在windows上用notepadd++编辑一个shell脚本,死活出错,回到linux下,编辑,还是有这个\r,搜索了下,是这样的:

由于在shell处理了windows里的字符文件,导致本该输出成两行的字符串变成了一行,而第一行行首的一些字符被第二行覆盖了

这是由于windows和linux下的/r ^M 字符的区别导致,可以将异常字符都筛选掉再进行输出:如sed 's/[^0-9,.:A-Za-z]//g'把不符合规则的字符过滤掉

转载了下面的可以参考下:

 

Unix体系里,每行结尾只有“<换行>”,即“\n”;Windows体系里面,每行结尾是“<换行><回 车>”,即“\n\r”。一个直接结果是,Unix体系下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。

 

 

 

好了,所以我的题目就出在被处理惩罚的文件的每行末尾都有^M符号,而这凡是是看不出来的。可以用"cat -A test.file"号令查看。是以当我想在行尾添加字符的时辰,它老是添加在行首且会覆盖掉本来行首的字符。

 

要把文件转换一下,有两种办法:

1.在Linux下用vi重新编写。绝对不会出错。

2.号令dos2unix test.file

 

3.去掉"\r" ,用号令sed -i ""s/\r//"" test.file

 

好了,如许处理惩罚完,就OK啦!!!

转载于:https://my.oschina.net/yuhangyes/blog/2051624

转载地址:https://blog.csdn.net/weixin_34413802/article/details/92435650 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:菜鸟一枚,记录成长(2)
下一篇:前端那些事之jquery插件篇--实现表格升序和降序

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年03月28日 12时42分21秒