62°

shell 私人习惯

一、shell脚本开始设定

#!/bin/bash
set -o nounset
set -o errexit

(1) set -o nounset

遇到不存在的变量,终止脚本的执行。shell脚本执行时,遇到未定义的变量,往往会继续执行,这不符合预期,也往往会带来莫名其妙的问题,增大排查难度。

(2) set -o errexit

执行shell脚本过程中,遇到错误,但往往会继续执行,这不符合预期,加上该设置,shell脚本执行过程中遇到错误就会终止脚本的执行。

这两个设定,都符合fail fast设计理念。

二、封装函数有必要

封装可以提高复用。

三、使用readonly和local修饰变量

readonly:顾名思义,只读。
local:函数内变量。
不仅能提高安全性,还能避免很多让人崩溃的莫名其妙的错误。

四、使用$()代替`(反单引号)

例子:

#!/bin/bash
path=`pwd`
echo $path
echo "`pwd`"
echo "$(pwd)"

$()能够支持内嵌;
$()不用转义;

五、使用[[]]代替[]

[[]]更符合人性编码

避免转义问题;
有不少新功能;
新功能包含但不限于:

|| :逻辑或
&& :逻辑与
< :字符串比较,不需要转义处理
== :通配符(globbing)字符串比较
=~ :正则表达式(regular expression, RegEx)字符串比较

从bash3.2开始,通配符和正则表达式都不能用引号包起来,所以,通配符和正则表达式加了引号就是字面比较。

所以如果表达式里有空格,必须存储到一个变量里,再进行通配符与正则的比较。

六、调试方法

1、echo 打印

2、使用 -n 对脚本进行语法检查。

sh -n myshell.sh

3、使用 -v 跟踪脚本里的每个命令的执行。

sh -v myshell.sh

4、使用 -x 跟踪脚本里的每个命令的执行,并附加扩充信息。

sh -x myshell.sh

也可以在脚本里添加如下设定来永久指定输出调试信息

set -o verbose 
set -o xtrace 

测试完后移除。

 

 

本文由【燃犀】发布于开源中国,原文链接:https://my.oschina.net/ranxi/blog/3072775

全部评论: 0

    我有话说: