
Ich arbeite an einer Aufgabe, bei der ich Benutzereingaben akzeptieren muss, um nach aktuellen Benutzern auf dem Server zu suchen. Wenn die Benutzereingabe online ist, muss ich den Benutzernamen ausgeben. Wenn der Benutzer nicht angemeldet ist, muss ich entsprechend reagieren. Ich arbeite seit Tagen an diesem Code und komme einfach nicht dahinter. Ich kann nach dem Benutzer suchen, aber wenn ich meine Benutzereingabe-Variablenzeichenfolge mit der Variablenzeichenfolge vergleiche, die den Namen des angemeldeten Benutzers enthält, erhalte ich immer eine Fehlermeldung, die besagt, dass zu viele Argumente vorliegen. Bitte sehen Sie sich meinen Code unten an:
#!/bin/bash
read -p "Please enter the user name you would like to search: " userName
name=$(who | grep "${userName}" | awk '{print $1}');
if [ [ $name == *"$userName"* ] ];
then
echo $name
else
printf "That user is not logged in.\n";
fi
Antwort1
Sie sind nah dran, aber das Hauptproblem ist, dass die Bash- [[ ]]
Konstruktion keine Leerzeichen zwischen den Klammern haben kann. Es denkt, Sie versuchen, mehrere [
Befehle auszuführen, was der POSIX- test
Befehl ist. Wenn Sie das beheben, funktioniert es, aber wenn der Benutzer mehrere TTYs geöffnet hat, wird deren Name einmal für jeden ausgedruckt. Wenn Sie verwenden möchten grep
, können Sie Folgendes tun:
#!/bin/bash
read -p "Please enter the user name you would like to search: " userName
if who | awk '{print $1}' | grep -wq "$userName"
then
echo "$userName is logged in."
else
echo "That user is not logged in.";
fi
exit