ubuntuusers.de

If-Anweisung funktioniert nicht

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

sharkattack

Avatar von 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 Team-Icon

Avatar von blackbird

Anmeldungsdatum:
19. November 2004

Beiträge: 3397

Wohnort: Hermagor, Kärnten - Österreich

[ ist ein Programm, also Leerzeichen davor und danach.

sharkattack

(Themenstarter)
Avatar von sharkattack

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

Avatar von 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 Team-Icon

Avatar von 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)
Avatar von sharkattack

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)
Avatar von sharkattack

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)
Avatar von sharkattack

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 Team-Icon

Avatar von 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)
Avatar von sharkattack

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 Team-Icon

Avatar von 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'
Antworten |