Ich versuche, einen Test zu schreiben, um zu überprüfen, ob ein Benutzer vorhanden ist. Ich weiß, es ist die einfache getent
, die ich später entdeckt, während mein Problem googeln (und die ich wahrscheinlich mit aufzuwickeln wird), aber ich bin jetzt interessiert dies als eine akademische Übung zu lösen.Bash Test der Funktion zurückgeben nicht funktioniert
Ich habe ein Skript, ein zweites Skript über den source
Befehl zu laden und dann eine Funktion von der geladenen Skript ausführt. Das Ziel war, den Check auszuführen, ohne eine Subshell zu erzeugen.
Das Problem, das ich bin, ist die Überprüfung des Rückgabestatus innerhalb dieser aufgerufenen Funktion (es wird wiederum eine zweite Methode aufruft).
Mein Code. Anfängliche tst.sh Skript:
#!/bin/sh
userName="$1"
source userExists.sh
exitIfUserExist "${userName}"
exitIfUserNotExist "${userName}"
exit 0
userExists.sh:
#!/bin/sh
#check if user exists already
checkIfUserExists()
{
userName=$1
echo "userName: $userName"
while IFS= read -r line
do
# First, whack off everything after the username
userNameTmp=${line%:*:*:*:*:*:*}
echo "userNameTmp: $userNameTmp"
# Then compare the username to that entered by the user.
[[ $userNameTmp = "${userName}" ]] && return 0
done </etc/passwd
echo "Not found"
return 2
}
exitIfUserExist()
{
if checkIfUserExists $1 == 0
then
echo "Error: User ${userName} already exists"
exit 1
fi
echo "end exitIfUserExist"
}
exitIfUserNotExist()
{
checkIfUserExists $1;echo $?
if checkIfUserExists $1 > 0
then
echo "Error: User ${userName} does not exist"
exit 1
fi
echo "end exitIfUserNotExist"
}
Ausgabe von zwei Tests - zunächst mit einem Benutzernamen, der das zweite mit einer vorhanden ist, das nicht:
[[email protected]_host ~]# sh t.sh bob
userName: bob
userNameTmp: root
userNameTmp: bin
userNameTmp: daemon
...
userNameTmp: rpc
userNameTmp: rpcuser
userNameTmp: nfsnobody
userNameTmp: bob
Error: User bob already exists
[[email protected]_host ~]# sh t.sh bobNOTTHERE
userName: bobNOTTHERE
userNameTmp: root
userNameTmp: bin
userNameTmp: daemon
...
userNameTmp: rpc
userNameTmp: rpcuser
userNameTmp: nfsnobody
userNameTmp: bob
Not found
end exitIfUserExist
userName: bobNOTTHERE
userNameTmp: root
userNameTmp: bin
userNameTmp: daemon
...
userNameTmp: rpc
userNameTmp: rpcuser
userNameTmp: nfsnobody
userNameTmp: bob
Not found
2
end exitIfUserNotExist
Wie zu sehen ist, funktioniert der erste Test, aber angesichts des zweiten Ergebnisses glaube ich nicht, dass der Test dann so funktioniert, wie ich es erwarte. Wie repariere ich die Tests in den "exitIf *" Funktionen, um richtig zu arbeiten?
Entweder 'if checkIf UserExists $ 1' oder 'if ((checkIfUserExists $ 1 == 0))' – cdarke
Das erste Formular funktioniert einwandfrei! Leider mir letzteres gibt: 'userExists.sh: Linie 37: ((: checkIfUserExists bobb = 0: "! Bobb = 0"! Syntaxfehler in Ausdruck (Fehler-Token)' – Jon