2016-08-08 19 views
0

在HA配置中,我定期檢查eth0上的VIP地址(可以稱它爲2.2.2.2)。如果是,那麼我需要調出另一組在/ etc /網絡/接口的配置文件爲eth0定義的IP地址的:Bash grep文件的字符串和使用每個作爲另一個命令中的變量

up ip addr add **1.2.3.34** dev $IFACE 
up ip addr add **1.2.3.40** dev $IFACE 
up ip addr add **1.2.3.48** dev $IFACE 

,並通過每個IP只到另一組命令:

ip a a **1.2.3.34/32** dev eth0 
ip a a **1.2.3.40/32** dev eth0 
ip a a **1.2.3.48/32** dev eth0 

什麼我迄今所做的是:

#!/bin/bash 
STATUS=$(ip a s eth0 | grep inet | awk '{print $2}' | sed 's/addr://') 
if ip a s eth0 | grep inet | awk '{print $2}' | sed 's/addr://' | grep 2.2.2.2/27 ; then 
cat /etc/network/interfaces | grep -o "up ip addr add [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" > /tmp/ext_ip.txt 

現在我需要幫助如何通過每條線以上(IP AA 1.2.3 ...)所提及的其他命令,但不知道如何正確地做到這一點。

(可選)如果系統中不存在VIP,則可以選擇恢復操作 - 以防主要HA主機脫機。實現這一

回答

0

一種方式將是對所有的IP地址解析成一個陣列,並使用for環路將它們分配給該接口:

#!/bin/bash 

IFACE='eth0' 
VIP='192.168.0.1' 
IFACES_FILE='/etc/network/interfaces' 

STATUS=$(ip address show "$IFACE" | grep -o "$VIP") 

if [ ! -z "$STATUS" ]; then 
    ip_addresses=($(grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' "$IFACES_FILE")) 
    for ip in "${ip_addresses[@]}"; do 
     ip address add "$ip" dev "$IFACE" 
    done 
fi 

這是一個簡化的例子。您可能想要添加更多檢查,添加一些日誌消息以提供對調試有用的輸出。此外,根據您的服務器配置,某些命令可能無法運行,沒有sudo

0

感謝安德里·L.我已經改善您的解決方案:

#!/bin/bash 
IFACE='eth0' 
VIP='2.2.2.2' 
IFACES_FILE='/etc/network/interfaces' 

STATUS=$(ip address show "$IFACE" | grep -o "$VIP") 

if [ ! -z "$STATUS" ]; then 
ip_addresses=($(grep -o 'up ip addr add [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' "$IFACES_FILE" | grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*')) 
for ip in "${ip_addresses[@]}"; do 
ip address add "$ip"/32 dev "$IFACE" 
done 
else 
for ip in "${ip_addresses[@]}"; do 
ip address del "$ip"/32 dev "$IFACE" 
done 
fi 

否則就嘗試添加在/ etc /網絡/接口文件中找到的所有IP地址和廣播。

相關問題