Wie zu verwenden die bash-return-code in bedingten?
Habe ich ein kleines Stück code, das überprüft die IP-Adresse Gültigkeit :
function valid_ip()
{
local ip=$1
local stat=1
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
OIFS=$IFS
IFS='.'
ip=($ip)
IFS=$OIFS
if [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
&& ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]; then
stat=1
else
stat=0
fi
fi
return $stat
}
Aber ich habe Probleme mit der Verwendung in bash-Bedingungen. Ich habe versucht, viele Techniken, um zu testen, Rückgabewert, aber die meisten von Ihnen scheitern auf mich.
if [[ !$(valid_ip $IP) ]]; then
if [[ $(valid_ip IP) -eq 1 ]]; then
etc. etc. Kann jemand empfehlen, was sollte ich hier tun ?
BEARBEITEN
Folgenden Ihre Vorschläge, die ich verwendet haben, so etwas wie :
if valid_ip "$IP" ; then
... do stuff
else
perr "IP: \"$IP\" is not a valid IP address"
fi
und ich bekomme Fehler wie
IP: "10.9.205.228" ist keine gültige IP-Adresse
InformationsquelleAutor der Frage Patryk | 2013-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den return-code ist verfügbar in der Spezial-parameter
$?
nachdem der Befehl beendet wird. In der Regel müssen Sie nur verwenden, wenn Sie möchten, speichern Sie den Wert vor der Ausführung eines anderen Befehl:oder wenn Sie brauchen, um eine Unterscheidung zwischen den verschiedenen nicht-null Status:
Andernfalls lassen Sie die verschiedenen Operatoren überprüfen Sie implizit:
Hier ist eine einfache, idiomatische Schreibweise
valid_ip
:Gibt es zwei Ausdrücke, die
[[...]]
und die{ ... }
; die beiden sind verbunden durch&&
. Wenn die erste ausfällt, dannvalid_ip
ausfällt. Wenn es gelingt, dann wird der zweite Ausdruck (zusammengesetzte Anweisung) ausgewertet. Dieread
teilt die Zeichenfolge in vier Variablen, und jeder wird separat getestet, innerhalb des arithmetischen Ausdrucks. Wenn alle wahr sind, dann die((...))
erfolgreich ist, was bedeutet, dass die&&
Liste erfolgreich ist, was bedeutet, dassvalid_ip
gelingt. Keine Notwendigkeit zu speichern, oder die return-explizite return-codes.InformationsquelleAutor der Antwort chepner
Keine Klammern benötigt, wenn der exit-status geprüft:
Rufen Sie einfach die Funktion in der Weise wie jeder andere Befehl.
InformationsquelleAutor der Antwort choroba