Mit bash versuche ich, /etc/passwd
Benutzer mit einer ID über 1000 abzufragen . Wenn sie vorhanden sind, tun Sie etwas, sonst tun Sie etwas anderes. Ich bin ratlos. Jede Hilfe wird geschätzt.
if [ "$(id -u)" -gt "1000" </etc/passwd]; then
do something
else
do something else
fi
Antworten:
Versuche dies:
Der erste
grep
suchtpasswd
nach Zeilen mit einer vier- oder mehrstelligen UID. Der zweitegrep
Filter filtert die Zeile mit uid 1000 heraus. Der Exit-Status ist 0, wenn noch Zeilen vorhanden sind, 1, wenn nicht.quelle
then
Linie usw. folgen-Evq
, um seine Ausgabe zu unterdrücken.getent passwd
anstelle der/etc/passwd
Datei.Um dies in einer
bash
Schleife zu tun, schlage ich vor, Folgendes zu verwendenread
und zuIFS
mögen:quelle
Anstatt
/etc/passwd
direkt zu lesen , sollten Sie dies verwendengetent passwd
. Dies funktioniert auch, wenn einige Ihrer Benutzer in LDAP oder Ähnlichem gespeichert sind.awk
sollte für das durch Doppelpunkte getrennte Ausgabeformat gut geeignet sein.Dies würde die Benutzernamen aller Benutzer mit UID> 1000 drucken:
Und dies würde nur gedruckt,
found
wenn mindestens eines davon gefunden wird:quelle
getent passwd | awk -F: '$3 >= 1000 && $3 < 2000 {print $1}'
>= 1000
scheint in der Tat sinnvoll zu sein. Die Frage hatte jedoch> 1000
aus irgendeinem Grund.nobody
scheint häufig zu sein6553x
oder3276x
, daher können Sie diese Obergrenze wahrscheinlich etwas anheben.Dieses Konstrukt macht wenig Sinn:
Der
id
Befehl funktioniert unabhängig von der Eingabeumleitung. Die Umleitung macht hier sowieso keinen Sinn.Sie können diese Pipeline in Ihrem Testvergleich verwenden. Es zeigt Ihnen die höchste Benutzer-ID auf dem Computer:
Möglicherweise möchten Sie es für einige Systeme optimieren, da möglicherweise der
nobody
Benutzer mit der UID65534
vorhanden ist.quelle
Mit Toms Code hat das bei mir funktioniert.
quelle