shell脚本遇到的一些坑

1,不同脚本共用同一个全局变量引发的血案

b脚本引用另一个a脚本,类似于C语言里面的 include 引用,C冲突了还好,有静态编译检查;但是 shell 脚本冲突了就甭想它给你提示,除非你目的就是要用a脚本的变量,否则脚本之间变量冲突产生的问题令人莫名其妙。这里也引出了 sh 的编程规范,尽量不用全局变量,函数里面变量尽量加 local 限制。

shell脚本遇到的一些坑_第1张图片

 

2,在管道里面exit 引发的血案

如果你认为只要在 shell 脚本里面执行了 exit 就会退出脚本,那你就太天真了。进一步来讲,如果你在管道里面 exit 错误状态码,然后在调用该脚本的地方,获取脚本的执行状态码,那你就等着抓狂吧。原因是:管道里面exit不会退出脚本,而仅是退出管道,然后在管道的下一条语句命令继续执行!

shell脚本遇到的一些坑_第2张图片

plus,用 while read line;do CMD done < ./t.txt  可以避免 while 管道 exit 不退出脚本的问题。

 

3,在管道里面使用全局变量的悲剧

如果你尝试在管道里面对某个变量赋值,然后在管道外面使用这个变量,对不起,你又采坑了。、

shell脚本遇到的一些坑_第3张图片

plus,这个同样可以用 while read line;do CMD done < ./t.txt  避免。

 

+++++++++++++++++++++++++++附加几个基本概念+++++++++++++++++++++++++++++

1,shell状态码只能是 0~255 之间的整数

2,shell能处理的数据仅限于整数,如果一定要用浮点数,了解下bc工具

3,数值比较

shell脚本遇到的一些坑_第4张图片

4,字符串比较

要注意 > 和 < 两个操作符都要加转义,并且比较的依据是按ASCII字典为依据的。这和sort按系统设置比较不同。

shell脚本遇到的一些坑_第5张图片

5,文件判断

shell脚本遇到的一些坑_第6张图片

shell脚本遇到的一些坑_第7张图片

你可能感兴趣的:(个人经验总结)