ubuntuusers.de

Syntax error: "else" unexpected (expecting "then")

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

kosti81

Avatar von kosti81

Anmeldungsdatum:
15. März 2008

Beiträge: Zähle...

Wohnort: Hamm

Und was soll hier wieder falsch sein ?? - das "then" ist doch drin !?!

	echo "Starte Disk Operationssystem (dos)..."
	sleep 2
	clear
	
	echo -n "Einige Optionen oder Parameter erforden den root Status -Aktivieren? "
	read rs


        if [ $rs = "j" ] then sudo -s	
	else
 	echo "root wurde nicht aktiviert!"
	sleep 2

	fi

	clear
	
	echo "Disk Operations Menü"
	echo " "
	echo "   1   -   Dateien/Ordner Löschen/Verschieben/Kopieren"
	echo " "
	echo "   2   -   Pakete installieren/entfernen"
	echo " "
	echo "   3   -   Programm beenden"
	echo " "
	echo -n "Bitte wähle ein Parameter aus: "
	
	read dospara

	if [ $dospara = 3 ]
		then exit
	elif [ $dospara = 2 ]
		then sh pie
	elif [ $dospara = 1 )
		then sh dol
	else
	echo "Falsche Eingabe! Programm wird beendet !"
	sleep 5
	exit
	fi

aikitux

Anmeldungsdatum:
6. Dezember 2007

Beiträge: 241

Hallo,

wenn Du die Then-Anweisung direkt hinter die eckige Klammer schreibst, gehört dazwischen ein Symikolon.
Alternativ kannst Du das then auch in die nächste Zeile schreiben.
Also entweder

if [ ... ] ; then ...
else ...
fi

oder

if [ ...]
then ...
else ...
fi

Gruß
Thomas

fuchsfuchsfuchs Team-Icon

Maskottchen
Avatar von fuchsfuchsfuchs

Anmeldungsdatum:
23. Juni 2008

Beiträge: Zähle...

Wohnort: Confoederatio Helvetica

Die formatierung ist murks, da waeren zusaetzliche Zeichen noetig,
oder, was ich empfehle, saubere Formatierung im Stile von

 echo "Starte Disk Operationssystem (dos)..."
   sleep 2
   clear
   
   echo -n "Einige Optionen oder Parameter erforden den root Status -Aktivieren? "
   read rs


   if [ $rs = "j" ] 
   then
         sudo -s   
   else
    	 echo "root wurde nicht aktiviert!"
    	 sleep 2
   fi

   clear
   
   echo "Disk Operations Menü"
   echo " "
   echo "   1   -   Dateien/Ordner Löschen/Verschieben/Kopieren"
   echo " "
   echo "   2   -   Pakete installieren/entfernen"
   echo " "
   echo "   3   -   Programm beenden"
   echo " "
   echo -n "Bitte wähle ein Parameter aus: "
   
   read dospara

   if [ $dospara = 3 ]
   then
   		exit
   elif [ $dospara = 2 ]
   then
   		sh pie
   elif [ $dospara = 1 ]
   then
   		sh dol
   else
   		echo "Falsche Eingabe! Programm wird beendet !"
   		sleep 5
   		exit 
   fi

Wobei es fuer das letzte eigentlich case geben wuerde und root kein Status ist.

Fuchs

kosti81

(Themenstarter)
Avatar von kosti81

Anmeldungsdatum:
15. März 2008

Beiträge: 30

Wohnort: Hamm

@ aikitux

Danke, denke, ich werde wohl die Semis; nutzen.

@ fuchsfuchsfuchs

in dem Fall also Case statt else, aha. Danke.
Ist mir schon klar, kein Status sondern Rechte 😉

Danke Euch!

Kosti81

fuchsfuchsfuchs Team-Icon

Maskottchen
Avatar von fuchsfuchsfuchs

Anmeldungsdatum:
23. Juni 2008

Beiträge: Zähle...

Wohnort: Confoederatio Helvetica

Rechte ist auch falsch, root ist ein Nutzer, mit Rootrechten spricht man von den Rechten, die dieser Nutzer hat.
(Gut, Ubuntu ist insofern ein Sonderfall, dass der Account root da standardmaessig kein Passwort hat und somit nicht aktiv ist)

Wegen case:

   case $variable in 
         wert) 
                aktion; 
                ;;
         nocheinwert)
                aktion; 
                ;;
          *)
                defaultaktion, wenn keiner der obrigen zutreffend; 
                ;; 
    esac

Das ;; entspricht dem break; in anderen switch/case Konstrukten, sorgt ergo dafuer,
dass an der Stelle abgebrochen und nicht in den naechsten Fall gesprungen wird.

hth

Fuchs

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

fuchsfuchsfuchs hat geschrieben:

Rechte ist auch falsch, root ist ein Nutzer, mit Rootrechten spricht man von den Rechten, die dieser Nutzer hat.

Nur noch ein paar Pfennige zur Terminologie:
Ich würde auch das Wort "Rootrechte" meiden, denn es suggeriert, dass nur Root auf einem Linux-System administrative Rechte haben könnte. Das stimmt allerdings keinesfalls. Der Linux-Kernel unterscheidet nicht zwischen "root" und "nicht-root", sondern gibt jedem Nutzer und jedem Prozess bestimmte Privilegien. Root ist nur insofern besonders, als das die UID 0 standardmäßig alle Privilegien hat. SELinux setzt genau hier an und entzieht sogar der UID 0 (root) bestimmte Privilegien, um Systemdienste, die mit UID 0 gestartet wurden, sicherer zu machen.

Diese Privilegien gibt es schon seit POSIX, sie sind also weitaus älter als Linux, welches diese Privilegien iirc seit Kernel 2.2 unterstützt. Seit 2.6.24 können diese Privilegien auch Dateien zugewiesen werden:

[lunar@nargond on pts/0] - [02. Juli 2008, 18:04:26] >> /usr/local/bin
--> cat script.sh
#!/bin/sh
echo $USER
cat < /etc/shadow

[lunar@nargond on pts/0] - [02. Juli 2008, 18:04:30] >> /usr/local/bin
--> ll script.sh
-rwxr-xr-x 1 root root 39  2. Jul 18:04 script.sh

[lunar@nargond on pts/0] - [02. Juli 2008, 18:04:35] >> /usr/local/bin
--> ./script.sh
lunar
./script.sh: 3: cannot open /etc/shadow: Permission denied

[lunar@nargond on pts/0] - [02. Juli 2008, 18:04:41] >> /usr/local/bin
--> sudo setcap cap_dac_override=ep script.sh

[lunar@nargond on pts/0] - [02. Juli 2008, 18:04:46] >> /usr/local/bin
--> ./script.sh
lunar
root:!:13621:0:::::
halt:*:9797:0:::::
operator:*:9797:0:::::
[...]


Man sieht: Obwohl der Nutzer nicht Root ist, besitzt er bei der Ausführung von "script.sh" trotzdem das Privileg, die Zugriffsrechte zu umgehen, und /etc/shadow auszulesen. Insofern würde ich persönlich nicht von "Root-Rechten", sondern von "Privilegien" sprechen.

Antworten |