shell脚本的规范

1、脚本的解释器

shell脚本开头(第一行)会指出由哪个程序(解释器)来解释脚本中的内容。这一行必须在脚本顶端的第一行,如果不是第一行则为注释。不管写什么脚本最好养成好习惯,都加上解释器名称,例如:#!/bin/bash”#!”又称为幻数

shbash的区别为:shbash的软链接,这里推荐用标准写法#!/bin/bash

 

下面是Linux中常用脚本语言开头的编码写法,不同语言脚本的开头一般都要加上如下相应语言的开头标识内容。

#!/bin/sh
#!/bin/bash
#!/usr/bin/awk
#!/bin/sed
#!/usr/bin/tcl
#!/usr/bin/expect
#!/usr/bin/perl
#!/usr/bin/env python

注意:如果脚本的开头不指定解释器,那么脚本就会使用系统默认的解释器执行,这样在某些情况下就会出现错误,所以一定要养成良好的习惯,在脚本的第一行指定解释器。

2、脚本注释

shell脚本中跟在”#”号后面的内容为注释,用来对脚本进行说明,注释部分不会被执行,仅仅是方便人们查看和理解脚本。必须要养成写注释的良好习惯,可以方便团队协作。同时也方便自己以后查看更加方便。

3shell脚本的执行

shell脚本以非交互式运行时,它会先查找环境变量ENV,该变量指定了一个环境文件(通常是.bashrc),然后从该环境变量文件开始执行,当读取了ENV文件后,shell才开始执行shell脚本中的内容。

 

shell脚本执行的三种方式,例如执行/root/install_httpd.sh

abash脚本文件名(不需要执行权限即可执行)

例如:bash /root/install_httpd.sh

 

b、绝对路径/脚本文件名(需要执行权限)

例如:chmod +x /root/install_httpd.sh && /root/install_httpd.sh

csource脚本文件名(需要执行权限)

例如:chmod +x /root/install_httpd.sh && source /root/install_httpd.sh

 

注意:在脚本文件中如果想调用另外的脚本文件,不能使用shbash,只能使用点或者source来进行调用。

4shell脚本开发基本规范

4.1、开头指定脚本解释器

#!/bin/sh #!/bin/bash

4.2、开头注意加时间、作者、联系邮箱、脚本作用等信息

可配置vim编辑文件时自动加上以上信息,方法是修改~/.vimrc配置文件

4.3、脚本中尽量不要使用中文注释

尽量使用英文注释,防止切换系统环境后出现中文乱码问题

4.4shell脚本使用.sh结尾

例:script-name.sh,这样方便自己或他人识别这是shell脚本文件

5、代码书写习惯

5.1、成对的符号尽量一次性写出来,防止遗漏

有很多人在编写shell脚本时,由于各种原因多写或漏写了符号,导致最终运行脚本时出错,从而浪费不必要的时间进行排错。例如:大括号{},中括号[],小括号(),单引号’’,双引号””,反引号``,等成对出现的符号尽量一次性写出来,然后在其中写入合适的代码即可,这样就避免了符号的遗漏导致的报错问题。

 

3.2、括号的保留空格习惯

中括号[ ]两端需要留有空格,不然会报错。书写时即可留出空格然后书写内容。如果不知道大括号{},中括号[],小括号(),到底哪种括号需要两端留空格,可以在书写这些括号的时候两端都保留空格来进行书写,这样可以有效避免因空格导致的各种错误。

 

3.3、流程控制语句一次性书写完再添加内容

1if语句格式一次书写完成

if 条件内容
then
  条件成立后执行的代码
fi

 

2for循环格式一次书写完成

for条件内容
   do
     条件成立后执行的代码
   done

提示:whileuntilcase等语句也是一样

3.4、代码缩进提高可读性

例如:下面的代码输出1-50之间所有的偶数

#!/bin/bash
for i in $(seq 50);
do
    if (( $i%2 == 0 ));then
        echo $i
    fi
done

6、变量的命名规则

1、变量名必须是以字母或下划线”_”开头,后面跟字母、数字或下划线。

2、变量名中间不能有空格,可以使用下划线连接。

3、变量名不要使用问号”?”、星号”*”或其他特殊字符。

4、变量名不能使用标点符号,更不能使用bash里的关键字,例如:ifforwhiledo等关键字。

5、变量名的命名尽量要有意义,最好能够让别人一眼能看出什么意思。

6、自定义变量尽量不要和系统环境变量冲突。

7、局部变量最好使用local进行定义。