sharkattack
Anmeldungsdatum: 7. April 2005
Beiträge: 444
|
Hi Ich schreibe gerade ein Shell-Skript, aber irgendwie funktioniert die folgende If-Anweisung nicht: echo "Welchen der folgenden Benutzer möchten Sie löschen?"
echo
cd /home
ls
echo
echo "Geben Sie den zu löschenden Benutzer ein:"
read $USERNAME
echo "Sind Sie sicher, dass der Benutzer $USERNAME inklusive seinem Heimat-Verzeichnis gelöscht werden soll? (ja/nein)"
read $SURE
if [$SURE == "ja"]; then
userdel -r $USERNAME
else
echo "Das Löschen des Benutzers $USERNAME wurde abgebrochen" Weiss jemand, wieso die If-Anweisung nicht funktioniert? Jetzt hätte ich zusätzlich noch eine Frage: Oben im Skript sieht man, dass ich die Benutzernamen durch einen ls Befehl im home-Verzeichnis auslese. Dies ist nicht gerade professionell. Weiss jemand, wie ich die existierenden Benutzer (ohne root) auflisten kann? Gruss
|
Thunderphreak
Anmeldungsdatum: 30. Januar 2008
Beiträge: 17
|
Du solltest dein if auch mit fi schließen. Falls das immer noch nicht funktioniert probiere zusätzlich \[[$SURE == "ja"]] mit doppelten Klammern aus.
|
blackbird
Anmeldungsdatum: 19. November 2004
Beiträge: 3397
Wohnort: Hermagor, Kärnten - Österreich
|
[ ist ein Programm, also Leerzeichen davor und danach.
|
sharkattack
(Themenstarter)
Anmeldungsdatum: 7. April 2005
Beiträge: 444
|
Thunderphreak hat geschrieben: Du solltest dein if auch mit fi schließen. Falls das immer noch nicht funktioniert probiere zusätzlich \[[$SURE == "ja"]] mit doppelten Klammern aus.
Hi Danke für die Antwort. Das fi habe ich schon gemacht. Tut mir Leid, ich habe es oben vergessen zu schreiben. blackbird hat geschrieben: [ ist ein Programm, also Leerzeichen davor und danach.[/quote] Danke für die Antwort. Nun sieht meine Anweisung so aus:
if [ $SURE == "ja" ]; then Hast du es so gemeint? So funktioniert es nämlich leider auch nicht. Es wird folgendes ausgegeben: Welchen der folgenden Benutzer möchten Sie löschen?
lost+found sharkattack test
Geben Sie den zu löschenden Benutzer ein:
test
Sind Sie sicher, dass der Benutzer test inklusive seinem Heimat-Verzeichnis gelöscht werden soll? (ja/nein)
ja
./script_test: line 12: [: ==: unary operator expected
Das Löschen des Benutzers test wurde abgebrochen
|
sxfreak
Anmeldungsdatum: 27. Juni 2006
Beiträge: 436
|
Hi Also wenn ich versuch über read was einzulesen steht bei mir in $SURE nacher nichts, deshalb tipp ich mal darauf dass das an read liegt. lg sx
|
cornix
Anmeldungsdatum: 9. März 2007
Beiträge: 4763
Wohnort: Ringenberg
|
1.) $USERNAME ist der Name von $USER, die Variable ist daher schlecht gewählt 2.) read VARIABLE und nicht read $VARIABLE 3.) Lass ein paar echos weg. #!/bin/bash
echo "Welchen der folgenden Benutzer möchten Sie löschen?"
cd /home
ls
echo "Geben Sie den zu löschenden Benutzer ein:"
read NAME
echo "Sind Sie sicher, dass der Benutzer $NAME inklusive seinem Heimat-Verzeichnis gelöscht werden soll? (ja/nein)"
read SURE
if [ "$SURE" == "ja" ]; then
userdel -r "$NAME"
else
echo "Das Löschen des Benutzers $NAME wurde abgebrochen"
fi
exit 0 Die Lösung mit "ls" finde ich nicht schlecht, man könnte auch über uids oberhalb 1000 gehen, scheint mir aber umständlicher zu sein. Gruß, cornix
|
sharkattack
(Themenstarter)
Anmeldungsdatum: 7. April 2005
Beiträge: 444
|
Hi Cornix Vielen Dank für die Antwort. Ich verstehe einige Dinge noch nicht so ganz: 1.) Was meinst du genau mit $USERNAME ist der Name von $USER? 2.) Alles klar, werde ich heute Abend anpassen und testen. 3.) Wenn ich die echos weglasse, ist es nich mehr Übersichtlich. Oder gibt es eine andere Möglichkeit einen Zeilenumbruch zu erstellen? Gruss
|
MrKanister
Anmeldungsdatum: 13. Oktober 2007
Beiträge: 2105
|
sharkattack hat geschrieben: 3.) Wenn ich die echos weglasse, ist es nich mehr Übersichtlich. Oder gibt es eine andere Möglichkeit einen Zeilenumbruch zu erstellen?
Jap:
echo -e "\n\n\n" ...gibt 3 Zeilenumbrüche aus.
Gruß Martin
|
sharkattack
(Themenstarter)
Anmeldungsdatum: 7. April 2005
Beiträge: 444
|
Danke für die schnelle Antwort. Wenn ich schonmal dabei bin, hätte ich gleich noch eine Frage: Kann man einem Ordner eine Berechtigung erteilen, damit alle Dateien im Ordner auch gleichzeitig die gleiche Berechtigung wie der Ordner erhalten? Ich habe es so versucht:
chmod 700 -r ordnername Das hat aber irgendwie nicht richtig funktioniert.
|
MrKanister
Anmeldungsdatum: 13. Oktober 2007
Beiträge: 2105
|
Versuchs mal mit nem großen "r" 😉 BTW: Im WIki gibts auch 'ne Seite dazu ▶ Shell/chmod
|
sharkattack
(Themenstarter)
Anmeldungsdatum: 7. April 2005
Beiträge: 444
|
Mr. Kanister hat geschrieben: Versuchs mal mit nem großen "r" 😉 BTW: Im WIki gibts auch 'ne Seite dazu ▶ Shell/chmod
Ja, so funktionierts, vielen Dank. Gruss
|
cornix
Anmeldungsdatum: 9. März 2007
Beiträge: 4763
Wohnort: Ringenberg
|
sharkattack hat geschrieben: 1.) Was meinst du genau mit $USERNAME ist der Name von $USER?
Klingt komisch, ist aber so. Gib folgendes im Terminal ein:
echo "Der Benutzer $USER hat den Namen $USERNAME und das Homeverzeichnis $HOME." Der Benutzer ernst hat den Namen Ernst Müller und das Homeverzeichnis /home/ernst. Siehe auch Umgebungsvariable. Gruß, cornix
|
sharkattack
(Themenstarter)
Anmeldungsdatum: 7. April 2005
Beiträge: 444
|
Aha, danke cornix, jetzt habe ich es verstanden. Gruss
|
Nilres
Anmeldungsdatum: 7. Dezember 2006
Beiträge: 371
|
Ich hät noch ne idee für dich du gibst ja mit ls die Verzeichnisse in /home aus wenn du das so machst: "ls | grep -v lost+found" Wird er kein lost + found mehr anzeigen! mfg nils
|
cornix
Anmeldungsdatum: 9. März 2007
Beiträge: 4763
Wohnort: Ringenberg
|
/home/lost + found ? Habe ich noch nie gesehen. Nee, komm, dann lieber über die uid...
cat /etc/group | sed '/:[0-9][0-9][0-9][0-9]:/!d;/:x:[0-9][0-9][0-9][0-9]:/ s/:x:[0-9][0-9][0-9][0-9]://g'
|