/ / find IP-Adresse meines Systems für eine spezifische Schnittstelle mit Shell-Skript (bash) - Linux, Bash, Shell, Sed, awk

finde die IP-Adresse meines Systems für eine spezifische Schnittstelle mit Shell-Skript (bash) - Linux, Bash, Shell, Sed, awk

Ich versuche IP-Adresse meines eigenen Systems durch ein Shell-Skript zu finden und schreibe in einen Text, der mein Skript-Inhalt ist

#!/bin/bash

wifiip=$(ip addr | grep inet | grep wlan0 | awk -F" " "{print $2}"| sed -e "s//.*$//")

eth0ip=$(ip addr | grep inet | grep eth0 | awk -F" " "{print $2}" | sed -e "s//.*$//")

if [ "$eth0ip" == "0" ]; then

echo "$eth0ip" | grep [0-9]$ > /home/pi/att/ip.txt

else

echo "$wifiip" | grep [0-9]$ > /home/pi/att/ip.txt

fi

und zu versuchen, etwas zu tun, wenn eine Schnittstelle nicht gedruckt wird, eine andere IP in ip.txt drucken

aber sein Geben

ip.sh: 14: [: unexpected operator

Antworten:

14 für die Antwort № 1

Lassen Sie zuerst Ihren Code aufräumen. Sie brauchen keine Ketten von einem Dutzend verschiedener Befehle und Pipes, wenn Sie bereits awk verwenden.

wifiip=$(ip addr | grep inet | grep wlan0 | awk -F" " "{print $2}"| sed -e "s//.*$//")

kann einfach so geschrieben werden:

wifiip=$(ip addr | awk "/inet/ && /wlan0/{sub(//.*$/,"",$2); print $2}")

aber das ganze Skript kann nur als ein awk Befehl geschrieben werden.

Ich brauche Sie, um Ihre Frage mit einigen Beispielausgaben des zu aktualisieren ip addr Befehl, die Ausgabe, die Sie von dem awk Befehl wünschenGeben Sie diese Eingabe an und erklären Sie deutlicher, was Sie zu tun versuchen, um Ihnen die korrekte Schreibweise zu zeigen, aber es könnte etwa so aussehen:

ip addr | awk "
/inet/ { ip[$NF] = $2; sub(//.*$/,"",ip[$NF]) }
END { print ( "eth0" in ip ? ip["eth0"] : ip["wlan0"] ) }
" > /home/pi/att/ip.txt

8 für die Antwort № 2

Hier ist eine nette Möglichkeit, Ihre IP-Adresse zu erhalten. Dies gibt Ihnen die Adresse, die verwendet wird, um das Internet während des Tests zu erreichen, so dass Sie die richtige IP erhalten, auch wenn Sie von Wifi zu eth oder zu einem anderen IF-Typ wechseln.

Siehe ausführlicheren Beitrag hier: Linux Bash-Skript zum Extrahieren der IP-Adresse

my_ip=$(ip route get 8.8.8.8 | awk "/8.8.8.8/ {print $NF}")

Um den Namen der Schnittstelle zu erhalten:

my_if=$(ip route get 8.8.8.8 | awk "/dev/ {f=NR} f&&NR-1==f" RS=" ")