2017-12-05 6 views
0

Auf einem Raspberry Pi versuche ich ein einfaches Skript zu schreiben, mit dem ich die statischen IP-Einstellungen in der Datei dhcpcd.conf ändern kann. Das folgende Skript funktioniert mit Ausnahme der DNS-Server. Es scheint, dass die sed-Anweisung für diese Zeile nicht funktioniert, da es zwei IP-Adressen durch ein Leerzeichen getrennt enthält. Das Skript wird wie folgt dar:Verwenden von sed zum Ändern der IP-Adressen in der Datei dhcpcd.conf

#!/bin/bash 
currip=$(cat /etc/dhcpcd.conf | grep -e '^static ip_address=' | cut -d= - 
f2) 
currgw=$(cat /etc/dhcpcd.conf | grep -e '^static routers=' | cut -d= -f2) 
currdns=$(cat /etc/dhcpcd.conf | grep -e '^static domain_name_servers=' | 
cut -d= -f2) 
echo "current IP is $currip" 
echo "current GW is $currgw" 
echo "current DNS servers are $currdns" 
echo "Enter new static ip in form of x.x.x.x/x: " 
read newip 
echo "Enter new GW in form of x.x.x.x: " 
read newgw 
echo "Enter new DNS servers in form of x.x.x.x x.x.x.x: " 
read newdns 
echo "currip is $currip" 
echo "new ip will be $newip" 
echo "new dns will be $newdns" 
sed -i -e "[email protected]$currip\[email protected][email protected]" /etc/dhcpcd.conf 
sed -i -e "[email protected]$currgw\[email protected][email protected]" /etc/dhcpcd.conf 
sed -i -e "[email protected]$currdns\[email protected][email protected]" /etc/dhcpcd.conf 
chip=$(cat /etc/dhcpcd.conf | grep -e '^static ip_address=' | cut -d= - 
f2) 
chgw=$(cat /etc/dhcpcd.conf | grep -e '^static routers=' | cut -d= -f2) 
chdns=$(cat /etc/dhcpcd.conf | grep -e '^static domain_name_servers=' | 
cut -d= -f2) 
echo "The ip has been changed to $chip" 
echo "The GW has been changed to $chgw" 
echo "The DNS server have been changed to $chdns" 

Die Linien in der dhcpcd.conf Datei sieht wie folgt aus:

statisch ip_adresse = 192.168.126.7/24

statische Router = 192.168.126.1

static domain_name_servers = 192.168.126.1 66.243.243.101

Wie muss ich meine sed-Anweisung für die Domäne_name_servers optimieren?

+2

Was geändert werden ist das Problem? Das aktuelle Skript ersetzen '192.168.126.1 66.243.243.101' mit dem, was neue DNS Sie eingegeben haben. – janos

Antwort

0

Das Problem ist Ihr statischer Router "192.168.126.1" in dem statischen domain_name_servers auch vorhanden ist. Wenn Sie also die Router mit

sed -i -e "[email protected]$currgw\[email protected][email protected]" /etc/dhcpcd.conf 

die Zeile in der Conf-Datei überschrieben wird geändert

static domain_name_servers={{what you entered}} 66.243.243.101 

so dass es nicht mehr durch den Nameservern sed abgestimmt.

Ich schlage vor, die Änderung der Suchen und Ersetzen-Strings die Schlüssel sowie die Werte, wie in der folgenden enthalten:

sed -i -e "[email protected]^static ip_address=$currip\[email protected] [email protected]" dhcpcd.conf 
sed -i -e "[email protected]^static routers=$currgw\[email protected] [email protected]" dhcpcd.conf 
sed -i -e "[email protected]^static domain_name_servers=$currdns\[email protected] [email protected]" dhcpcd.conf**strong text** 

Das macht es so keine anderen Linien, die passieren eine frühere enthalten ersetzt -string wird

+0

Duh, nicht gesehen. Ich hatte einmal versucht, es so zu machen, wie Sie es vorgeschlagen hatten, aber ich konnte es nicht zur Arbeit bringen. Muss einen Syntaxfehler gehabt haben. Ich denke, das war bevor ich anfing @ anstelle von/für das Trennzeichen in meinen sed-Anweisungen zu verwenden. Vielen Dank für Ihre Hilfe. Funktioniert jetzt großartig. –

Verwandte Themen