今天需要完成一個 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 方法
但調用方法的時候不需要帶上括號,否則會提示語法錯誤