Status_code_1=$(curl -o /dev/null -s -w "%{http_code}\n" -H "Authorization: token abc123" https://url_1.com)
Status_code_2=$(curl -o /dev/null -s -w "%{http_code}\n" -H "Authorization: token abc123" https://url_2.com)
if [ $Status_code_1 == "200" ]; then
echo "url_1 is running successfully"
else
echo "Error at url_1. Status code:" $Status_code_1
fi
if [ $Status_code_2 == "200" ]; then
echo "url_2 is running successfully"
else
echo "Error Error at url_2. Status code:" $Status_code_2
fi
主腳本每天安排并運行,每次都列印成功訊息。如果狀態碼不是 200、$Status_code_1 或 $Status_code_2,以向下的為準列印錯誤代碼。
代碼運行良好,但我想知道如何使它更短。可以將前兩行的 curl 命令組合起來,因為它們具有相同的授權和所有內容,只是最后的 url 不同。稍后,如果陳述句幾乎相同,只是我為不同的 url 分別運行它們。
是否可以將前 2 行寫在一行中,并且兩個 if 陳述句都相同?我知道 AND 和 OR 可用于 if 陳述句,但說我們有 5 個 url 和 2 個關閉,在這種情況下它將如何列印這 2 個 url 的名稱?
uj5u.com熱心網友回復:
為避免重復,您可以將需要重用的代碼封裝在一個函式中。
httpresult () {
curl -o /dev/null -s -w "%{http_code}\n" -H "Authorization: token abc123" "$@"
}
check200 () {
local status=$(httpresult "$1")
if [ "$status" = "200" ]; then
echo "$0: ${2-$1} is running successfully" >&2
else
echo "$0: error at ${2-$1}. Status code: $status" >&2
fi
}
check200 "https://url_1.com/" "url_1"
check200 "https://url_2.com/" "url_2"
拆分httpresult為一個單獨的函式并不是真正必要的,但作為一個更模塊化設計的演示,以及作為您可能在其他腳本中重用的東西,它可能很有用。
根據常見的最佳實踐,我更改了狀態訊息的格式以在訊息中包含腳本的名稱,并將診斷結果列印到標準錯誤而不是標準輸出。
該check200函式接受 URL 和可選的人類可讀標簽以在診斷訊息中使用;如果您省略它,它們也將僅包含 URL。從您的問題中不清楚標簽是否重要和有用。
請注意,標準比較運算子[ ... ]is =, not ==(盡管 Bash 會接受兩者)。
uj5u.com熱心網友回復:
有沒有辦法在 bash 中組合多個 curl 陳述句和 if 陳述句?
curl可以在一次運行中檢索多個 URL,但是您需要將其輸出決議為每個 URL 的片段。由于您想要報告每個 URL 的回應,因此為每個 URLcurl單獨運行可能對您有利。
但是您可以通過撰寫一個執行一次curl運行并報告結果的 shell 函式來減少腳本的重復性:
test_url() {
local status=$(curl -o /dev/null -s -w "%{http_code}\n" -H "Authorization: token abc123" "$1")
if [ "$status" = 200 ]; then
echo "$2 is running successfully"
else
echo "Error at $2. Status code: $status"
fi
}
然后為給定的 URL 運行它是單行的:
test_url https://url_1.com url1_1
test_url https://url_2.com url1_2
總而言之,這也與原始長度大致相同,但這是長度的收支平衡點。每個要測驗的特定 URL 只需要一行,而不是您的版本中的六行。此外,如果您想更改查找或狀態報告的任何詳細資訊,那么您可以在一個地方為所有人完成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418598.html
標籤:
