我正在開發一個 Bash 腳本,它根據輸出中包含的內容檢查幾個不同命令的輸出和回顯的資訊。它是完整的減去一個命令我和我可以使用一些額外的洞察力。
這是針對 Nginx 環境的。所以命令很簡單:nginx -t(測驗 Nginx 配置)。單獨運行該命令很容易,因此在腳本中不一定需要它,但是為了我自己的知識,它讓我想知道如何實作這一點。
我嘗試了以下幾種不同的變體(都無濟于事):
if [[ $(nginx -t >/dev/null 2>&1) == *"Success"* ]]; then echo "pass"; else echo "FAIL"; fi;
然后是下一個版本,但輸出:
# if [[ $(nginx -t >/dev/null 2>&1) == *"Success"* ]]; then echo "PASS"; else echo "| FAIL"; fi;
FAIL
盡管它正在過去。我的另一個版本輸出成功,即使它失敗了。
在這個特定的服務器環境 nginx -t 有一個多行輸出,但最后幾行是我關心的:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
邏輯很簡單,檢查“語法正常”或“測驗成功”字串是否存在,然后根據該字串回顯輸出。但我似乎無法讓它發生XD
Bash 和 Nginx 專家,你能幫我舉個例子嗎?:)
uj5u.com熱心網友回復:
在 ...
if [[ $(nginx -t >/dev/null 2>&1) == *"Success"* ]]; then echo "pass"; else echo "FAIL"; fi;
... 該>/dev/null部分通過將命令重定向到 來抑制命令的標準輸出/dev/null,不留下任何內容。該2>&1部分使標準錯誤轉到同一個地方,盡管否則它無論如何都不會被捕獲。
假設您確實想要 testnginx的輸出而不是其退出狀態,并且根據您對所需邏輯的描述,似乎這樣的事情是合適的:
if nginx -t 2>&1 | tail -n2 | grep -E -q 'syntax is ok|test is successful'; then
echo pass
else
echo FAIL
fi
該tail命令過濾掉nginx's 輸出的最后兩行以外的所有內容,以使事情變得更容易grep并減少誤報的范圍。該grep檢查是否剩余輸出包含兩個指定的字串中的至少一個,并回傳當且僅當它的成功狀態。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/314545.html
