If-Anweisungen mit Exit-Code-Anweisungen

If-Anweisungen mit Exit-Code-Anweisungen

Ich bin ein Anfänger bei Linux/Unix. Hier ist meine Aufgabe, sie ist zu lang, um alles hier zu posten:https://i.stack.imgur.com/v2AJR.jpg

Hier ist die Logik, die ich habe:

Dieser Code prüft, ob der Benutzer ein Argument eingegeben hat oder nicht. Ich weiß nicht, was ich unter „sonst“ eintragen soll. Wir haben nie über die „which“-Anweisung gesprochen, die ich hier von einem anderen Benutzer gelernt habe, daher ist nicht davon auszugehen, dass sie verwendet wird. Nur grundlegende Befehle, dies ist keine sehr fortgeschrittene Aufgabe.

if [ $# -ne 1 ]; then
        echo Please enter a single, valid user id: 
        read userid
else
        userid=$1
        **what goes here?**
fi

Um den vollständigen Namen eines Benutzers anzuzeigen (z. B. Ben Franklin), ist dies der Code, den ich geschrieben und getestet habe:

grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'

Stellen Sie fest, ob der Benutzer angemeldet ist oder nicht:

Wenn der Benutzer nicht angemeldet ist (gibt Exitcode 1 zurück):who | grep $userid

  1. Dann zeigen Sie grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'AND an.echo is NOT currently logged on Beenden Sie das Skript dann mit dem Code 1.

Wenn der Benutzer angemeldet ist (gibt den Exitcode 0 zurück):who | grep $userid

  1. Dann zeigen Sie grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'AND an.echo is currently logged on Beenden Sie das Skript dann mit dem Code 0.

Bestimmen, ob ein Benutzer gültig ist:

Wenn der Benutzer ungültig ist (gibt Exitcode 1 zurück):grep $userid /etc/passwd

  1. Dann sollte es anzeigenecho "The user you entered, $userid is not a valid user on this system."

Wenn der Benutzer gültig ist (gibt den Exitcode 0 zurück):grep $userid /etc/passwd

Wie schreibe ich dieses Skript? Wie ist die vollständige Struktur? Ich komme bei der Struktur/dem Setup nicht weiter.

Antwort1

Da dies wie eine Aufgabe aussieht, gebe ich Ihnen nur die Werkzeuge und einige Hinweise:

  1. Wenn dem Skript kein Argument übergeben wurde, $1ist (das erste Argument des Skripts) leer. Sie können dies mit testen [[ -z $1 ]]. Wenn Sie einen Fehler fürzu vieleArgumente, testen Sie die Anzahl der Argumente mit [[ $# -eq 1 ]](ist für ein einzelnes Argument wahr).

  2. Mit dem gentent passwd "$username"Befehl kann der passwdEintrag für den Benutzer abgerufen werden $username. Der Befehl schlägt mit einem Exit-Status ungleich Null fehl, wenn der Benutzer nicht existiert. Das bedeutet, dass Sie if ! getent passwd "$username" >/dev/null; then ...; fiauf einen nicht vorhandenen Benutzer reagieren können $username.

  3. Das 5. Feld des passwdEintrags für einen Benutzernormalerweiseenthält den vollständigen Namen des Benutzers (es gibt keine Garantie, dass er in der Form „Vorname Nachname“ vorliegt). Der Eintrag enthält möglicherweise zusätzliche Kommas am Ende, die Sie löschen müssen. Sie können die Ausgabe von getent passwd "$username"using analysieren cut -d: -f 5, um zum fünften Feld zu gelangen, und dann mit ab dem ersten Komma löschen name=${name%%,*}.

    Auf einigen Systemen kann der vollständige Name des Benutzers ein &Zeichen enthalten. Auf diesen Systemen sollte dieses &Zeichen durch den Benutzernamen ersetzt werden (sodass der Name System &für den Benutzer operatorzu wird System operator). Ich bin nicht sicher, ob Linux dies im Allgemeinen tut, aber das könnte mit gemacht werden name=${name/&/$username}.

  4. Das whoDienstprogramm gibt eine Liste der aktuell angemeldeten Benutzer aus. Um eine Übereinstimmung $usernamedamit zu finden, verwenden Sie grep -e "^$username\>". Das \>entspricht dem Ende eines Wortes, sodass zB antonybei der Suche nicht übereinstimmt oder anton. in einer Anweisung grep -qnützlich ist .if

Dies folgt der Codestruktur:

  1. Überprüfen und behandeln Sie ungültige Argumente (fehlend: lesen; zu viele: beenden oder einfach zuerst verwenden). Eine ifAnweisung.
  2. Ungültige Benutzernamen prüfen und behandeln. Eine ifAnweisung.
  3. Vollständigen Namen des Benutzers abrufen. Variablenzuweisung(en) mit Befehlsersetzung.
  4. Prüfen, ob Benutzer angemeldet ist (und Ausgabe). Eine ifAnweisung, ggf. mit elseVerzweigung.

Ich sehe in diesem Skript keine Schleife, es wird also eine Reihe von if-Anweisungen und Variablenzuweisungen sein.

verwandte Informationen