使用 sed 和 bash 產生網路設定檔

使用 sed 和 bash 產生網路設定檔

我對我的腳本編寫能力有點生疏,正在嘗試找到一個良好的起點來創建一個腳本,該腳本創建文件(生成新文件名)並通過將其增加 +1 來編輯文件中的 IP 地址

我的場景是這樣的 - 我們有大約 50 個 IP 位址要添加到我們的網路腳本中,每個位址都有一個遞增的 IP。我可以手動完成此操作,但我認為這是嘗試加快我的腳本編寫技能的好時機。

命名方案如下:

ifcfg-eth0:1, ifcfg-eth0:2, ifcfg-eth0:3 ...*n*

這些文件的內容是:

DEVICE=eth0:1
NETMASK=255.255.255.0
IPADDR=10.2.7.148
BOOTPROTO=none
ONBOOT=yes
DNS1=10.2.53.150
PEERDNS=yes
DNS2=10.2.53.250
GATEWAY=10.2.7.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no

每個文件中的位置IPADDR=10.2.7.148應增加+1。

例如: ifcfg-eth0:2文件將完全相同,除了將IPADDR10.2.7.149等等。

我相當確定我應該調用sed來查找和替換 IP 位址。

例如,使用搜尋 IP 位址sed可以像這樣完成:

sed -rn '/(IPPADDR=)((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' file

需要採取什麼步驟來產生一個名稱eth0:N加+1的新檔案以及檔案中的IP位址。

先致謝!

編輯:讓我澄清一下檔案名稱不應包含 IP 位址。

我需要將 file1 複製到 file2 eth0:1-> ,eth0:2其文件內容與上面相同,但IPADDR=生成的文件上的欄位應增加 1。

注意:檔案名稱也應該增加+1 IE。cp ifcfg-eth0:1 ifcfg-eth0:2

答案1

據我所知sed無法對數字進行計算,我會使用awk

$ awk -F'.' '$1~"IPADDR"{$NF++;OFS="."}1' file
DEVICE=eth0:1
NETMASK=255.255.255.0
IPADDR=10.2.7.149
BOOTPROTO=none
ONBOOT=yes
DNS1=10.2.53.150
PEERDNS=yes
DNS2=10.2.53.250
GATEWAY=10.2.7.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no

將其包含到要更改的文件循環中。


解釋:

  • -F'.': 使用.欄位分隔符
  • $1~"IPADDR"{}:如果第一個欄位包含IPADDR模式,則執行裡面的內容{}
  • $NF++;OFS=".":最後一個欄位的增量號(NF表示記錄中的欄位數)。
  • 1: 列印所有內容

答案2

我不知道我是否正確理解了你的意思。這是你想要的嗎?

重擊:

[root@domain]:test # IP=120
[root@domain]:test # for i in {1..50}; do
> echo "IP=10.11.11.$IP
> NETMASK=255.255.255.0
> DEVICE=eth0:1
> ONBOOT=yes
> DNS1=10.2.53.150
> PEERDNS=yes
> DNS2=10.2.53.250
> GATEWAY=10.2.7.1
> TYPE=Ethernet
> USERCTL=no
> IPV6INIT=no" >> ifcfg-eth0:$i; IP=$((IP+1)); done;

結果:

[root@domain]:test # ls ifcfg* |wc -l
50
[root@domain]:test # grep IP= ifcfg*
ifcfg-eth0:1:IP=10.11.11.120
...
ifcfg-eth0:50:IP=10.11.11.169

答案3

:

$ perl -ne '
    s/^(IPADDR=10\.2\.7\.)(\d+)/$2 < 255 and sprintf "%s%s", $1, $2 + 1/e;
    print
' file

輸出:

DEVICE=eth0:1
NETMASK=255.255.255.0
IPADDR=10.2.7.149
BOOTPROTO=none
ONBOOT=yes
DNS1=10.2.53.150
PEERDNS=yes
DNS2=10.2.53.250
GATEWAY=10.2.7.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no

可以新增-i開關來修改文件到位

相關內容