Bash在表中搜索IP

时间:2016-01-13 19:57:27

标签: bash awk grep

我在表格中简单搜索值的输出时遇到问题。这是我的nova命令的输出:

+------------+-----------+----------+----------+
| Ip         | Server Id | Fixed Ip | Pool     |
+------------+-----------+----------+----------+
| 10.10.10.1 |           | -        | floating |
| 10.10.10.2 |           | -        | floating |
| 10.10.10.3 |           | -        | floating |
| 10.10.10.4 |           | -        | floating |
| 10.10.10.5 |           | -        | floating |
+------------+-----------+----------+----------+

让我们说我在寻找10.10.10.4。我需要运行这个nova命令来输出这个表,然后在表中搜索10.10.10.4。对于每个非10.10.10.4的IP,我需要运行:

nova floating-ip-delete <ip>

命令。一旦它最终找到正确的IP,脚本就会停止。

本质上,我们一次捕获一大块浮动IP(此表/示例中为5),查看是否捕获了特定IP,如果没有,则将IP释放回池中。然后冲洗并重复,直到我们最终获得正确的IP。

非常感谢任何帮助!

*更新*

这是我到目前为止所处的位置。请忽略带有tenantid部分的第一部分。这只是一些内部安全检查:

#!/bin/bash
# Capture floating IP

################# CONFIG ##################
FLOAT="blah"
TENANTID="blah"
###########################################

# Start
if ! [ "$TENANTID" = "$OS_TENANT_ID" ]; then
        echo "ERROR"
else
        for ((i=1;i<=10;i++));
        do
                echo $i
                nova floating-ip-create floating
        done
        nova floating-ip-list > BLOCK
        while read garbage1 IP garbage2;
        do
                if [ "$IP" != "FLOAT" ]; then
                        nova floating-ip-delete "$IP"
                else
                        exit 0
                fi
        done < <(tail -n +4 /tmp/BLOCK)
fi

2 个答案:

答案 0 :(得分:1)

你可以从这样的事情开始:

while read garbage1 ip garbage2; do
    if [ "$ip" != '10.10.10.4' ]; then
        nova floating-ip-delete "$ip"
    else
        exit 0
    fi
done < <(tail -n +4 /path/to/file | head -n -1)

阅读:

Process substitutionRead builtintail(1)head(1)

答案 1 :(得分:0)

您可以尝试以下方式:

#!/bin/bash
while [[ $(novaCommand | grep '10.10.10.4') = "" ]] ; do
  for i in $(novaCommand | grep -Eo '10\.10\..*') ; do 
   nova floating-ip delete ${i}
  done
done
exit