如何读取 Bash 中的多个数组并在第一次匹配后跳过数组
How to read multiple arrays in Bash and skip the array after first match
这是我的bash脚本
我有 4 组数组,在每组中我都通过 SSH 连接到每台服务器以查找 /data 文件系统是否存在。如果它匹配,它应该跳过数组并移动到下一个数组。我无法处理中断,因为它退出了整个脚本。有什么想法吗?
declare -a siteA=("server01" "server02" "server03")
declare -a siteB=("server04" "server05" "server06")
declare -a siteB=("server07" "server08" "server09")
declare -a siteB=("server10" "server11" "server12")
cmd=$(df -h|grep /data)
for i in "${siteA[@]}" "${siteB[@]}" "${siteC[@]}" "${siteD[@]}"; do
ping -c 2 ${i} > /dev/null 2>&1
if [[ $? -eq 0 ]] ; then
X=$(ssh root@${i} -q $cmd1 2>&1)
if [[ $Z == "/data" ]]; then
echo "$i: has /data"
fi
fi
done
要在找到匹配项时继续下一个数组,只需将循环内容包装在函数内的参数循环中,然后为每个站点调用它:
has_running_host() {
for host
do
[code which `break`s on a match]
done
}
has_running_host "${siteA[@]}"
has_running_host "${siteB[@]}"
[…]
虽然不是很好,但您可以将两个循环与 eval 结合使用:
for j in siteA siteB siteC siteD; do
for i in $(eval echo ${${j}[@]}); do
echo $i
done
done
这将允许您在内部循环中使用 break,从而跳转到下一个数组
这对我有用,从远程 ssh 获取输出也是一个挑战
这是我的bash脚本
我有 4 组数组,在每组中我都通过 SSH 连接到每台服务器以查找 /data 文件系统是否存在。如果它匹配,它应该跳过数组并移动到下一个数组。我无法处理中断,因为它退出了整个脚本。有什么想法吗?
declare -a siteA=("server01" "server02" "server03")
declare -a siteB=("server04" "server05" "server06")
declare -a siteB=("server07" "server08" "server09")
declare -a siteB=("server10" "server11" "server12")
cmd=$(df -h|grep /data)
for i in "${siteA[@]}" "${siteB[@]}" "${siteC[@]}" "${siteD[@]}"; do
ping -c 2 ${i} > /dev/null 2>&1
if [[ $? -eq 0 ]] ; then
X=$(ssh root@${i} -q $cmd1 2>&1)
if [[ $Z == "/data" ]]; then
echo "$i: has /data"
fi
fi
done
要在找到匹配项时继续下一个数组,只需将循环内容包装在函数内的参数循环中,然后为每个站点调用它:
has_running_host() {
for host
do
[code which `break`s on a match]
done
}
has_running_host "${siteA[@]}"
has_running_host "${siteB[@]}"
[…]
虽然不是很好,但您可以将两个循环与 eval 结合使用:
for j in siteA siteB siteC siteD; do
for i in $(eval echo ${${j}[@]}); do
echo $i
done
done
这将允许您在内部循环中使用 break,从而跳转到下一个数组
这对我有用,从远程 ssh 获取输出也是一个挑战