作为一个天天与Linux打交道,并以此为生的Linux运维工程师,最常用的工具性语言恐怕就是shell了, 而对于大多数的Linux和一些类Unix而言,其默认的shell就是Bash。使用Bash一般有两种场景,一是直接使用命令,二是,将这些命令组合起来,加上逻辑判断、循环、加上异常文本处理工具、加上函数构成shell脚本。用于自动、快速的执行某些批量操作。
为达到某个目的,Bash往往有多种实现方法,比如在脚本中 反引号 ` ` 与$() 是相同的, 这种特性提供方便的同时也为代码的复杂度和可读性带来一定的影响,Bash没有所谓的规范,只有所谓不同的使用习惯,如下是我平时使用时的一些积累,同时也参考了许多优秀的博客,记录如下,目的呢就是单纯的与大家分享,毕竟互联网环境下就是互相分享,彼此借鉴,在原有的基础的创新,最重要的不是人云亦云,而是真正领悟之后的相互点评、思想碰撞。
1.添加注释
这个不用过多解释,无论哪种语言这甚至都是必须的,目的是增强可读性,节约他人和以后的自己熟悉脚本的时间。
2.构建一种一致的格式
我这里主要指的是缩进 1-- 使用空格(2个或者4个,我一般用4个)取代tab。 2--代码分层要明确,属于一级的要对其,这一点Python做的很好,强制要求的。这样写出来的shell自己看着心情也不同。
3.编码习惯上的一些注意
这里纯属个人习惯,但如下这样做的好处是使代码风格更统一,目的还是提高可读性
1--使用花括号 { } 。 用花括号括起来所有的变量名。比如 ${name} 而不是 $name
2--计算表达式中用$() 代替反引号 `` 这样易于阅读。
4.比较变量的值时建议采用双引号将变量括起来。如下:
这样写的好处至少有: 当变量为空时依然可以执行。 当变量中有特殊字符时(接收用户输入的情况下)依然可以执行。
#!/bin/bash if [ ${name} == "wencheng" ];then echo "hello" fi #####推荐使用如下 #!/bin/bash if [ "${name}" == "wencheng" ];then echo "hello" fi #
5.异常退出时要使用异常退出代码 如: exit 500 。这样在此脚本被其他调用时能够更好的判断是否执行完成,如若错误也能判断错误类型。
6.尽量避免单行代码过长的问题。 这样在不同的终端,都能够正常的显示。
7.避免命令的复杂性,这个是仁者见仁智者见智的问题,有的时候你是发现不了自己代码的臃肿程度的。比如:
grep cut 等组合使用达到的效果就不如 awk 来的直接。
借用一个例子:
检索用户ID为502的用户: (第三种会比较的高效)
#一。 cat /etc/passwd | grep 502 |cut -d: -f1 #二。 grep 502 /etc/passwd |awk -F":" '{print $1}' #三。 awk -F ":" '$3 == 502{print $1}' /etc/passwd
先总结这些,欢迎指正。
另外附上控制输出终端颜色的方法 : https://misc.flogisoft.com/bash/tip_colors_and_formatting