Linux 运维笔记

整理收集Linux运维方面的知识

Shell

在Linux运维中写shell脚本是再正常不过的了,要让脚本写得有效率、安全,这里整理了一些东西。

开场语句

1
2
3
4
#!/bin/bash

set -o nounset
set -o errexit

set -o nounset
在默认情况下,遇到不存在的变量,会忽略并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。
画外音:有些变量名的手误,会让人崩溃的调试半天,通过这个方式,这类手误秒发现。

set -o errexit
在默认情况下,遇到执行出错,会跳过并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。
画外音:有些Linux命令,例如rm的-f参数可以强制忽略错误,此时脚本便无法捕捉到errexit,这样的参数在脚本里是不推荐使用的。

注意封装函数

有的时候封装函数能够很大程度上提高程序的复用性

1
2
3
4
5
6
log() { # classic logger
local prefix="[$(date +%Y%m%d\ %H:%M:%S)]:"
echo "${prefix} $@" >&2
}

log "INFO" "a message"

使用$()代替反引号

原因:

  1. $()能够支持内嵌;
  2. $()不用转义;
  3. 有些字体,反单引号和单引号很像,容易把人搞晕;

使用多种调试方法

echo不是唯一的调试方法

bash -n test.sh 可以对脚本进行语法检查

bash -v test.sh 可以跟踪脚本中每一个命令的执行

bash -x test.sh 跟踪每一个命令的执行,并添加扩充信息

也可以在脚本里,添加
set -o verbose
set -o xtrace
来永久指定输出调试信息。

其他

博客中还有其他的Linux文章: