我正在嘗試撰寫一個非常基本的 bash 腳本,以在 linux 服務器上運行。我不確定為什么它不起作用。
目的是測驗網站是否回傳200 OK回應。如果是,則退出。如果沒有,則運行命令。
腳本是:
#!/bin/bash
if HEAD https://google.com | grep '200\ OK' | wc -l; then
echo "Site is up";
else
sudo wo clean --all && sudo wo stack reload --all
fi
問題是,如果站點啟動,它會給出預期的輸出。即...
1
Site is up
但是,如果站點已關閉(假設我替換https://google.com為https://766google.com,我得到的輸出是:
0
Site is up
我嘗試了許多變體,包括將HEAD ...命令放入[ ].
例如,我試過這個:
#!/bin/bash
if [ HEAD https://google.com | grep '200\ OK' | wc -l ]; then
echo "Site is up";
else
sudo wo clean --all && sudo wo stack reload --all
fi
但是當站點關閉時,它會運行所需的命令,但會出現錯誤......我得到這個輸出:
./sitecheck.sh: line 3: [: missing `]'
wc: ]: No such file or directory
Cleaning NGINX FastCGI cache ...
[THE OUTPUT OF COMMAND IT RUNS WHEN SITE IS DOWN]
有人能解釋一下這個腳本有什么問題嗎?
謝謝。
uj5u.com熱心網友回復:
如果要統計輸出的行數,需要用 捕獲管道的輸出$(...),然后用((...))來做算術比較。一組括號是輸出捕獲;兩組是算術。
if (($(HEAD https://google.com | grep '200 OK' | wc -l) > 0)); then
echo "Site is up";
else
sudo wo clean --all && sudo wo stack reload --all
fi
一個更簡單的方法是使用grep -q. 無需輸出匹配項,而是要求您決議grep的輸出,而是grep -q直接回傳成功或失敗退出代碼,指示是否找到匹配項。
if HEAD https://google.com | grep -q '200 OK'; then
echo "Site is up";
else
sudo wo clean --all && sudo wo stack reload --all
fi
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/474219.html
標籤:重击
