• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Überprüfen ob Benutzer angemeldet ist oder nicht

byron1778

Hacker
Hallo,

ich möchte folgendes Script schreiben.

Ich will überprüfen ob ein User angemeldet ist und wenn ja, dann soll ausgegeben werden, Benutzer [eingabe des benutzers] ist angemeldet

Wenn er nicht angemeldet ist, dann halt entsprechend ein andere Text.

folgendes habe ich dabei versucht.

Code:
#!/bin/sh

echo 'Benutzer eingeben'

read benutzer

wer = `who -u` | grep -w "$benutzer"

if [ "$benutzer" = "wer" ]
then
echo 'Benutzer "$benutzer" ist angemeldet
else
echo 'Benutzer "$bentuzer" ist nicht angemeldet
fi

Leider kommt bei mir immer nur dass der Benutzer nicht angemeldet ist.

Kann mir jemand sagen, was ich hier falsch mache?

Vielen Dank schon einmal im voraus

Mfg
Byron
 

nbkr

Guru
Da sind einige Tippfehler und auch ein zwei logische Fehler drin. So sollte es gehen:

Code:
#!/bin/sh

echo 'Benutzer eingeben'
read benutzer

wer=`who -u | grep -i $benutzer | wc -l` 

echo -n "$benutzer ist ";

if [[ $wer == 0 ]]; then
    echo -n "NICHT ";
fi

echo "angemeldet";

Abgesehen davon: Bitte die [ code ] Tags benutzen (ich habs mal ausgebessert) und Shellscripte gehören ins Konsolenforum.
 
OP
B

byron1778

Hacker
Ok, danke Dir

Werde es ausprobieren .

Sorry, wusste nicht, daß Sie ins Konsolenforum gehören.

Danke nocheinmal.

Mfg
Byron
 

regexer

Advanced Hacker
nbkr schrieb:
Code:
#!/bin/sh

echo 'Benutzer eingeben'
read benutzer

wer=`who -u | grep -i $benutzer | wc -l` 

echo -n "$benutzer ist ";

if [[ $wer == 0 ]]; then
    echo -n "NICHT ";
fi

echo "angemeldet";
Hmm. Ein paar Verbesserungsvorschläge:
1. Ein groß geschriebener User ist etwas anderes als ein klein geschriebener. Deshalb kein "-i"
2. "grep tin" findet z.B. auch martin und tina. Wenn schon who, dann also die erste spalte ausschneiden und auf grep "^$benutzer$" prüfen.
3. Der grep kann auch zählen. Mit der Option "-c". Aber selbst das ist nicht nötig, da der if den Returncode von grep abfragen könnte. Das sähe dann so aus:
Code:
if ! who | awk '{ print $1 }' | grep -q "^$benutzer$"
then
echo -n NICHT
fi
Man könnte dem ganzen gleich aus dem weg gehen und das Kommando "w" benutzen, welches den usernamen als Parameter verträgt. Eine Lösung sähe hier wiefolgt aus:
Code:
if ! w -h "$benutzer" | grep -q ""
then
echo -n NICHT
fi
 
Oben