shell 腳本易錯點記錄

今天需要完成一個 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 方法

但調用方法的時候不需要帶上括號,否則會提示語法錯誤

參考鏈接

shell中各種括號的作用()、(())、[]、[[]]、{}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章