Ich möchte gerne die echo
Befehl ausgeführt, wenn cat /etc/passwd | grep "sysa"
ist nicht wahr.
Was mache ich falsch?
if ! [ $(cat /etc/passwd | grep "sysa") ]; then
echo "ERROR - The user sysa could not be looked up"
exit 2
fi
Ich möchte gerne die echo
Befehl ausgeführt, wenn cat /etc/passwd | grep "sysa"
ist nicht wahr.
Was mache ich falsch?
if ! [ $(cat /etc/passwd | grep "sysa") ]; then
echo "ERROR - The user sysa could not be looked up"
exit 2
fi
Hier ein Beispiel für eine Antwort:
Um sicherzustellen, dass die Datenlogger online sind, muss ein cron
Skript wird alle 15 Minuten ausgeführt und sieht wie folgt aus:
#!/bin/bash
#
if ! ping -c 1 SOLAR &>/dev/null
then
echo "SUBJECT: SOLAR is not responding to ping" | ssmtp abc@def.com
echo "SOLAR is not responding to ping" | ssmtp 4151112222@txt.att.com
else
echo "SOLAR is up"
fi
#
if ! ping -c 1 OUTSIDE &>/dev/null
then
echo "SUBJECT: OUTSIDE is not responding to ping" | ssmtp abc@def.com
echo "OUTSIDE is not responding to ping" | ssmtp 4151112222@txt.att.com
else
echo "OUTSIDE is up"
fi
#
...und so weiter für jeden Datenlogger, den Sie in der Montage sehen können unter http://www.SDsolarBlog.com/montage
Zu Ihrer Information: Mit &>/dev/null
leitet alle Ausgaben des Befehls, einschließlich Fehler, an /dev/null
(Die Bedingung erfordert nur die exit status
der ping
Befehl)
Außerdem ist zu beachten, dass seit cron
Aufträge laufen als root
ist es nicht erforderlich, die sudo ping
in einem cron
Drehbuch.
Auf Unix-Systemen, die es unterstützen (nicht macOS, wie es scheint):
if getent passwd "$username" >/dev/null; then
printf 'User %s exists\n' "$username"
else
printf 'User %s does not exist\n' "$username"
fi
Dies hat den Vorteil, dass jeder Verzeichnisdienst (YP/NIS oder LDAP usw.) und die lokale Kennwortdatenbankdatei abgefragt werden können.
Das Problem mit grep -q "$username" /etc/passwd
ist, dass es ein falsches Positiv gibt, wenn es keinen solchen Benutzer gibt, aber etwas anderes dem Muster entspricht. Dies kann passieren, wenn es irgendwo in der Datei eine teilweise oder genaue Übereinstimmung gibt.
Zum Beispiel, in meinem passwd
Datei gibt es eine Zeile, die besagt
build:*:21:21:base and xenocara build:/var/empty:/bin/ksh
Dies würde eine gültige Übereinstimmung bei Dingen wie cara
et enoc
usw., obwohl es in meinem System keine solchen Benutzer gibt.
Für eine grep
Lösung korrekt zu sein, müssen Sie die /etc/passwd
Datei:
if cut -d ':' -f 1 /etc/passwd | grep -qxF "$username"; then
# found
else
# not found
fi
... oder eine andere ähnliche Prüfung gegen den ersten der :
-begrenzte Felder.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.