Prüfen Sie, Ob ein Benutzer Existiert

Ich möchte ein Skript erstellen, um zu überprüfen, ob ein Benutzer existiert. Ich bin mit der logic unten:

# getent passwd test > /dev/null 2&>1
# echo $?
0
# getent passwd test1 > /dev/null 2&>1
# echo $?
2

So, wenn der Benutzer vorhanden ist, dann werden wir Erfolg haben, sonst ist der Benutzer nicht vorhanden ist. Ich habe oben den Befehl in der bash-Skript wie folgt:

#!/bin/bash

getent passwd $1 > /dev/null 2&>1

if [ $? -eq 0 ]; then
    echo "yes the user exists"
else
    echo "No, the user does not exist"
fi

Nun, mein Skript sagt immer, dass der Benutzer vorhanden ist, egal was:

# sh passwd.sh test
yes the user exists
# sh passwd.sh test1
yes the user exists
# sh passwd.sh test2
yes the user exists

Warum wird die oben genannte Bedingung immer auswerten, um WAHR zu sein und zu sagen, dass der user existiert?

Wohin gehe ich falsch?

UPDATE:

Nach der Lektüre alle Antworten, ich fand das problem in meinem Skript. Das problem war die Art, wie ich war, die Umleitung getent Ausgabe. Also habe ich alle entfernt die Umleitung Zeug und machte die getent Zeile wie folgt Aussehen:

getent passwd $user  > /dev/null

Nun mein script funktioniert Prima.

Ich denke, dass, wenn Sie $? erhalten Sie den return-code des test Befehl. Siehe Antwort unten.
Ist, dass der genaue code ausgeführt werden? Keine "echo" debug-Anweisungen zwischen dem Aufruf getent und Ihre if Aussage? Dazu führen würde, dass $? zu prüfen, den exit-status von echo, nicht Ihren Anruf zu getent.
Ja, ich denke du meinst 2>&1 statt 2&>1.
Code funktioniert auch auf nicht-leere Eingabe, aber wenn $1 ist nicht festgelegt, wird die if-Anweisung gibt true zurück. Von meinen Tests, Lösung wäre wrap $1 im Doppelzimmer Zitate: getent passwd "$1" > /dev/null 2&>1.
Bitte markieren Sie eine Antwort

InformationsquelleAutor slayedbylucifer | 2013-02-11

Schreibe einen Kommentar