bash 脚本:在输出列表上执行相同的命令?
bash script: Execute the same command on a list of output?
我创建了一个 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
.
将grep
替换为sed
即可直接获取IP列表;为了将这些 IP 存储在 bash 数组中,您可以使用 mapfile -t
和 进程替换 :
mapfile -t ips < <(
kubectl get nodes -o yaml |
sed -nE 's/^[[:space:]]*- address: ([0-9.]+)$//p'
)
现在您只需使用 for
循环遍历数组:
for ip in "${ips[@]}"
do
ping -c 1 "$ip"
done
您可以将输出通过管道传输到 xargs
并执行您想要的命令。
在你这样做之前你应该清理输出。
在您的示例中,将您的输出通过管道传输到 :
sed -e 's/^[[:space:]]*- address: \([^[:space:]]*\)[[:space:]]*$//g'
你应该得到:
kubectl get nodes -o yaml | grep -- "- address:" | sed -e 's/^[[:space:]]*- address: \([^[:space:]]*\)[[:space:]]*$//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:]]*$//g' | xargs -I {IP} ping -c 1 -w 5 {IP}
我创建了一个 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
.
将grep
替换为sed
即可直接获取IP列表;为了将这些 IP 存储在 bash 数组中,您可以使用 mapfile -t
和 进程替换 :
mapfile -t ips < <(
kubectl get nodes -o yaml |
sed -nE 's/^[[:space:]]*- address: ([0-9.]+)$//p'
)
现在您只需使用 for
循环遍历数组:
for ip in "${ips[@]}"
do
ping -c 1 "$ip"
done
您可以将输出通过管道传输到 xargs
并执行您想要的命令。
在你这样做之前你应该清理输出。 在您的示例中,将您的输出通过管道传输到 :
sed -e 's/^[[:space:]]*- address: \([^[:space:]]*\)[[:space:]]*$//g'
你应该得到:
kubectl get nodes -o yaml | grep -- "- address:" | sed -e 's/^[[:space:]]*- address: \([^[:space:]]*\)[[:space:]]*$//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:]]*$//g' | xargs -I {IP} ping -c 1 -w 5 {IP}