【Linux命令】 linux下高效编写shell脚本的10个建议

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 【Linux命令】 linux下高效编写shell脚本的10个建议

在Linux环境下工作 ,shell脚本的编写应该是一个必备的基本技能了,本文将分享 10 个写出高效可靠的 shell脚本的实用技巧

本文主要内容来源于《10 Useful Tips for Writing Effective Bash Scripts in Linux》,再加上自己的一点理解而成。如果你还有一些其他更好的脚本编程经验想要分享,在下面评论框分享出来吧。

这条建议不但适合于shell脚本,对于其它编程语言同样实用。这样做的好处是可以帮助他人或者你自己后面阅读脚本时能够迅速了解脚本的功能,便于维护。试想下,如果有一天你的主管给了你一堆没有注释的代码,你是不是很抓狂呢。

shell脚本中,注释一般以#开头,后面跟着是注释的内容。注释不可少,但是注释也不是越多越好,对于shell脚本,注释一般包括下面几个部分:

如果脚本中某条命令运行失败,我们不应该让其继续运行,因为这样可能会影响脚本的其余部分,导致逻辑错误。逻辑错误一般又是很难定位的,与其这样,不如让其提前结束更早的找出脚本中的错误。可以用下面的命令设置在遇到命令失败时来退出脚本执行:

脚本中使用到未声明的变量同样可能导致逻辑错误,可以用下面的命令设置脚本在使用到未声明的变量时退出执行:

当使用一个变量的值时,用双引号有助于防止由于空格导致单词分割开和由于识别和扩展了通配符而导致的不必要匹配,下面的例子说明了一切。

【Linux命令】 linux下高效编写shell脚本的10个建议

同样,这条建议也适用其它编程语言,函数的使用使得代码更模块化,更可读和可重用;shell脚本中定义函数的语法如下所示:

为什么会有这个建议,原文并没有给出详细的说明,只是简单的提了句:  == 是  = 的同义词,因此仅用个单个  = 来做字符串比较。不过在原文的后面有网友回答了,是因为==只适用于bash;POSIX形式是“=”,使用 = 更方便移植。

这两种形式都可以用作命令替换,所谓命令替换是用这个命令的输出结果取代命令本身。这里建议用  $(command) 而不是反引号 ``command </code> 来做命令代换。

静态变量不会改变;它的值一旦在脚本中定义后就不能被修改,对于这类变量,在声明的时候应该用readonly去声明。

由于在bash环境变量名字都是大写,因此建议自己定义的变量用小写字母命名,以防止命名冲突,同时命名时要做到顾名思义,你取的名字要有意义。

当你的脚本有成千上万行时,一旦脚本运行出错,排错是一件异常困难的事情;为了在脚本执行前更轻松地将问题定位出,需要进行一些调试,下面是一些指南来帮助你掌握调试的技巧。

How To Enable Shell Script Debugging Mode in Linux

How to Perform Syntax Checking Debugging Mode in Shell Scripts

How to Trace Execution of Commands in Shell Script with Shell Tracing

参考资料

10 Useful Tips for Writing Effective Bash Scripts in Linux

推荐阅读:

  

       

     

码农有道,为您提供通俗易懂的技术文章,让技术变的更简单!

【Linux命令】 linux下高效编写shell脚本的10个建议

专注服务器后台技术栈知识总结分享

欢迎关注交流共同进步

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 【Linux命令】 linux下高效编写shell脚本的10个建议


 上一篇
正则表达式(五)—扩展正则表达式 正则表达式(五)—扩展正则表达式
**正则表达式 ** 扩展正则表达式 一位看了前面几篇文章朋友向我反馈,说前面匹配次数相关的正则中,前后两个没必要加,意思是”qin{2}” 写成”qin”{2}” 就可以了。确实没错,不过不能直接改成”qin”{2}” ,因为这属于扩展正
2021-04-05
下一篇 
Apache服务的反向代理及负载均衡配置 Apache服务的反向代理及负载均衡配置
后端主机直接yum安装 yum install httpd -y 反向代理端采用源码编译安装 yum install apr-devel pcre-devel apr-util-devel openssl-devel -y 编译安装ap
2021-04-05