Ich bin relativ neu im Bash-Scripting, aber ich bin sehr vertraut mit Python und vielen Bash-Befehlen. Ich habe mich gefragt, ob es möglich ist, einen Befehl wie zu verwenden ifconfig eno1
und die Ausgabe als Bedingung für eine if
Anweisung zu verwenden. Wenn Sie im Grunde Folgendes eingeben:
ifconfig eno1
und Sie erhalten eine aktive IP. Gibt es eine Möglichkeit, die Ausgabe davon in einer Variablen als 1/0 oder Wahr/Falsch zu speichern, um sie im folgenden if
Anweisungsbeispiel zu verwenden (vorausgesetzt, dies ifoutput
ist der Variablenname):
if [ "$ifoutput" == "$True"]
then
echo connection is active!
fi
Ich habe darüber nachgedacht, vielleicht ein Python-Skript aufzurufen, das im Wesentlichen dasselbe tut, aber ich dachte, ich würde auf dasselbe Problem stoßen: Es gibt keine Möglichkeit, einen individuellen Rückgabewert vom Python-Skript zu erhalten, der in der if
Anweisung verwendet werden kann. Bitte geben Sie mir einen Rat und seien Sie nachsichtig mit mir – wie gesagt, ich bin relativ neu im Bash-Skripting! Ich habe bereits Methoden, dies ausschließlich mit Python zu tun, aber ich versuche, mehr über Bash-Skripting zu lernen. Vielen Dank im Voraus!
Antwort1
ifconfig
gibt nach Abschluss einen numerischen 8-Bit-Wert zurück (wie jeder *nix-Prozess, der sauber beendet wird).
Normalerweise wird Null ( 0
) verwendet, um Erfolg anzuzeigen, und ein anderer Wert, um einen Fehler anzuzeigen. Dieser Rückgabecode ist als verfügbar $?
.
ifconfig
gibt auch an aus stdout
, zum Beispiel:
eth0 Link encap:Ethernet HWaddr 02:42:ac:14:00:02
inet addr:172.20.0.2 Bcast:172.20.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:20430143 errors:0 dropped:0 overruns:0 frame:0
TX packets:20966475 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:46532669457 (46.5 GB) TX bytes:44114090048 (44.1 GB)
Wenn Sie ermitteln möchten, ob der Vorgang ifconfig eth0
erfolgreich war (d. h. ob die Schnittstelle abhängig von den Berechtigungen vorhanden ist), können Sie Folgendes tun:
ifconfig eth0
if [ $? -eq 0 ]; then
echo yay
fi
if ifconfig eth0; then
echo yay
fi
ifconfig eth0 && echo yay
Die ifconfig
Ausgabe von kann durch Anhängen eines Folgendes ausgeblendet werden > /dev/null
:
if ifconfig eth0 > /dev/null; then
echo yay
fi
Sie haben nach dem Drucken des Rückgabecodes gefragt, und das ist ein Problem für Anfänger ...
Sie können ganz einfach Folgendes tun:
ifconfig eth0
echo $?
Aber nach dem Aufruf von ist echo
der Rückgabecode ( ) der Rückgabecode von und nicht von ... Um damit umzugehen, weisen Sie ihn einfach einer temporären Variablen zu:$?
echo
ifconfig
ifconfig eth0
RET=$?
echo ${RET}
if [ ${RET} -eq 0 ]; then
echo yay
fi
Hinweis: [
ist ein integrierter Befehl, der Ausdrücke auswerten kann, die eckigen Klammern ( [
/ ]
) sind eigentlich kein Teil der if
Syntax:
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
Wenn Sie tatsächlich versuchen,Holen Sie sich die IP-Adresse einer Schnittstelle, möchten Sie möglicherweise eine Pipeline wie eine der folgenden verwenden (es gibt viele Möglichkeiten, um dasselbe Ergebnis zu erzielen):
ifconfig eth0 | grep -Eom1 'inet addr:([0-9]{1,3}\.){3}[0-9]{1,3}' | cut -d: -f2
ifconfig eth0 | sed -re '/inet addr:/!d;s/^[^:]+://;s/ .*$//'