我創建了一個 bash 腳本,在其中執行此 K8S 命令列:
kubectl get nodes -o yaml | grep -- "- address:"
輸出如下所示:
- address: 10.200.116.180
- address: node-10-200-116-180
- address: 10.200.116.181
- address: node-10-200-116-181
- address: 10.200.116.182
我想回圈輸出串列并對每個地址 ip 進行一些測驗,例如:ping 10.200.116.182.
uj5u.com熱心網友回復:
您可以將輸出通過管道傳輸到xargs并執行您想要的命令。
在你這樣做之前,你應該清理輸出。在您的示例中,將您的輸出通過管道傳輸到:
sed -e 's/^[[:space:]]*- address: \([^[:space:]]*\)[[:space:]]*$/\1/g'
你應該最終得到:
kubectl get nodes -o yaml | grep -- "- address:" | sed -e 's/^[[:space:]]*- address: \([^[:space:]]*\)[[:space:]]*$/\1/g'
輸出應該只是地址,例如:
10.200.116.180
node-10-200-116-180
10.200.116.181
node-10-200-116-181
10.200.116.182
現在是時候使用清理后的輸出來執行ping. 要將地址傳遞給 ping,我們將使用xargs. 為此,我們將清理后的輸出通過管道傳輸到:
xargs -I {IP} ping -c 1 -w 5 {IP}
最終命令:
kubectl get nodes -o yaml | grep -- "- address:" | sed -e 's/^[[:space:]]*- address: \([^[:space:]]*\)[[:space:]]*$/\1/g' | xargs -I {IP} ping -c 1 -w 5 {IP}
uj5u.com熱心網友回復:
通過替換grep為sed你可以直接得到IP串列;并將這些 IP 存盤在 bash 陣列中,您可以使用mapfile -t行程替換:
mapfile -t ips < <(
kubectl get nodes -o yaml |
sed -nE 's/^[[:space:]]*- address: ([0-9.] )$/\1/p'
)
現在您只需使用回圈遍歷陣列for:
for ip in "${ips[@]}"
do
ping -c 1 "$ip"
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475839.html
標籤:重击
上一篇:如果單詞以-或-開頭,則洗掉它
下一篇:Bash:將陣列拆分為KV對
