今天需要完成一个 nginx 服务的启停控制脚本,是服务可以一键完成启动、停止、重载等功能。
完成脚本的过程中会遇到一些老朋友, 但许久不见再见面还是会感到陌生,因此记录一下以加深记忆。
1. “[: =: unary operator expected”
看下我这里出错的脚本行
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
这几行的目的是,source 一下系统配置文件 /etc/sysconfig/network, 这里面可能会定义变量 NETWORKING,值为 yes 或者 no,即需要判断主机网络是否可用来判断是否启动服务,
问题在于如果配置文件里面没有 NETWORKING 变量,那么 [ ${NETWORKING} = “no” ] 就会被解释为 [ = “no” ],= 是双目运算符,此时这行脚本只有一个参数,于是提示语法错误,要求提供单目运算符。
解决办法是尽量在条件判断处使用双中括号,而不是单中括号,即:
[[ ${NETWORKING} = "no" ]] && exit 0
2. 方法调用
shell 方法定义的时候按下面的方式定义:
function_name() {
# shell scripts
}
function_name # 正确调用: shell 方法
function_name() # 错误调用: shell 方法
但调用方法的时候不需要带上括号,否则会提示语法错误