Angenommen, wir haben nur 1 Parameter
host $1
Wie kann ich überprüfen, ob der obige Befehl mir eine Antwort gibt oder:
Host $1 not found (NXDOMAIN)
und anstatt einen Fehler nicht gefunden anzuzeigen, möchte ich nur einen-
Antwort1
host
wird bei Nichtauflösen Ihrer Eingabe mit 1 beendet, sodass Sie eine if-Konstruktion verwenden können:
if ! host "$1" | grep -v 'not found'; then
printf '%s\n' '-'
fi
Wir verwenden, !
um zu testen, ob der Befehl fehlschlägt (da ich davon ausgehe, dass Sie die Ausgabe wie gewohnt drucken möchten, wenn er erfolgreich ist). host
sendet den not found
Fehler an stdout statt an stderr, sodass wir stdout nicht einfach verbergen können. Aus diesem Grund leite ich den Host-Befehl an grep -v 'not found'
dies weiter. Dadurch wird der Fehler „nicht gefunden“ ausgeblendet, falls er vorhanden ist, und es wird trotzdem 1 beendet, wodurch die if-Konstruktion druckt -
. Wenn es nicht gefunden wird, not found
wird 0 beendet.
Antwort2
Wäre der Exit-Status ausreichend? Sie können den $?
Exit-Status des letzten Befehls einbinden, auch wenn Sie die Ausgabe unterdrückt haben. Für host
den Exit-Status ist 0 Erfolg und 1 Fehler
[17:54] [ws ~] $ host 127.0.0.112 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
1
[17:54] [ws ~] $ host 127.0.0.1 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
0