Shellskript zum (Un)Mounten

moagnus

Ensign
Registriert
Juli 2007
Beiträge
189
Hallo zusammen,
bin relativ neu in die Shellskripterei eingestiegen und beim ersten Versuch auf eigene Faust auch gleich gestolpert.
Die Fehlermeldung lautet:
mount_unmount.sh: line 24: syntax error near unexpected token `}'
mount_unmount.sh: line 24: `}'
(Die Zeile 24 besteht nur aus der abschließenden Klammer der Funktion mount_fkt().)

Das Skript dazu:
PHP:
#!/bin/sh

# Rückgabewerte von System-mount- und -umount-Befehl abfragen
mount_fkt() {
        echo "USB-Stick [1]"
        echo "Externe FP [2]"
        echo "Abbruch [0]"
        read sel2
        if [ $sel2 = 1 ]; then
                if [ `whoami` != root ]; then
                        echo "superuser-Rechte benötigt."; su
                mount /dev/sda /media/usbdisk
                echo "USB-Stick eingehängt."
        elif [ $sel2 = 2 ]; then
                if [ `whoami` != root ]; then
                        echo "superuser-Rechte benötigt."; su
                mount /dev/sdb1 /media/Externe\ Festplatte/
                echo "Ext. FP eingehängt."
        elif [ $sel2 = 0 ]; then
                echo "Abbruch"
        else
                echo "Hüh?"
        fi
}

umount_fkt() {
        echo "USB-Stick [1]"
        echo "Externe FP [2]"
        echo "Abbruch [0]"
        read sel2
        if [ $sel2 = 1 ]; then
                if [ `whoami` != root ]; then
                        echo "superuser-Rechte benötigt."; su
                umount /media/usbdisk
                echo "USB-Stick ausgehängt."
        elif [ $sel2 = 2 ]; then
                if [ `whoami` != root ]; then
                        echo "superuser-Rechte benötigt."; su
                umount /media/Externe\ Festplatte/
                echo "Ext. FP ausgehängt."
        elif [ $sel2 = 0 ]; then
                echo "Abbruch."
        else
                echo "Hüh?"
        fi
}

echo "Skript zum (Un-)Mounten von Wechseldatenträgern."
echo "Mounten [1]"
echo "UNmounten [2]"
echo "Abbruch [0]"

read sel1
if [ $sel1 = 1 ]; then
        mount_fkt
elif [ $sel1 = 2 ]; then
        umount_fkt
elif [ $sel1 = 0]; then
        echo "Abbruch"
else
        echo "Hüh?"
fi

Danke im Voraus! :)
 
lol... php witzig... ähh moagnus wofür brauchst das überhaupt?? was benutzt für ne distri? wenn z.B. ubuntu würde er das doch eh automatisch einhängen sobald du den stick ransteckst. macht das deine distri nicht für dich??
 
Lacht ihn nicht aus. Er hat vollkommen Recht: Ich Trottel hab bei den nachträglich eingefügten if-Anweisungen die abschließenden "fi" vergessen.
Jetzt bereitet allerdings das "su" noch Probleme: Wenn ichs stehen lass, passiert gar nix (nur nach der Eingabe von "exit" zum Wechseln in den alten Benutzerkontext läufts weiter, das (Un)Mounten funktioniert allerdings nicht), wenn ichs rausmach und das Skript als root ausführe, damit es eben entsprechende Berechtigungen hat, funktionierts. Allerdings würde ich gern vom Skript zur Eingabe des superuser-PW aufgefordert werden.

@blackiwid: Bei dem Level lassen wir Sinn oder Unsinn doch einfach mal dahingestellt... :P
 
@moagnus du meinst weil du ein shell script benutzt qualifiziert dich das, als nicht noob im linuxbereich? da kenn ich aber andere anfragen. Gut wirst jetzt wohl schon deinen grund haben.

gut wenn du es komplett selber geschrieben hast k aber oft kopieren sich "noobs" sowas nur von irgend ner seite und pfuschen noch dran rum oder so.

aber wie gesagt glaubs dir schon das du kein noob bist wenn du es sagst ^^

Hast über udev deinen usb-devices fixe device-namen zugewießen? hda hdb1??

kleine idee könntest das script sudo-flag oder wie das heißt setzten, dann wirst automatisch beim start nach dem rootpasswort gefragt.

Achso jetzt versteh ich dein problem, lol du willst erst von su nach dem passwort gefragt werden und dann soll das script weitermachen, du bist dann schon root, aber danach kann er nicht einfach das script weitermachen. mal nicht ohne irgendwelche tricks.

wie gesagt würd dir eher zu nem sudo flag oder zu einzelnen sudo befehlen raten, der fragt dann ja nur einmal nach dem passwort, hat auch den vorteil das du nach dem script nicht plötzlich root bist, naja gut könntest dich darin wieder ausloggen.

aber wenn es unbedingt mit su arbeiten willst:
-c, --command SHELL
Specify a command that will be invoked by the shell using its -c.

würd ich das irgendwie benutzen, entweder gibst das so mit su -c mount ... & exit

aber wie gesagt die elegantere lösung ist das du das ganze script sudo setzt oder vor den befhelne wo root zugriff verlangen ein sudo setzt, wirst dann eh nur einmal gefragt ansonsten merkt er sich es. dann kannst die ganze abfrage mit "you need blabla" auch nimmer.
 
moagnus schrieb:
Jetzt bereitet allerdings das "su" noch Probleme: Wenn ichs stehen lass, passiert gar nix (nur nach der Eingabe von "exit" zum Wechseln in den alten Benutzerkontext läufts weiter, das (Un)Mounten funktioniert allerdings nicht), wenn ichs rausmach und das Skript als root ausführe, damit es eben entsprechende Berechtigungen hat, funktionierts. Allerdings würde ich gern vom Skript zur Eingabe des superuser-PW aufgefordert werden.

Gibts für sowas nicht "sudo"?
 
@blackiwid: Entschuldige, aber ich habe genau nirgends durchblicken lassen, dass ich irgendwie vorhabe, mich mit dem Skript zu qualifizieren, sondern sogar explizit angemerkt, dass ich gerade erst ins Shellscripting eingestiegen bin und das Skript eine reine Übung ist.
Außerdem möchte ich mal wissen, wer sich von den paar Zeilen beeindrucken lässt...

Mit "sudo" läuft das Skript zwar durch, (aus)gehängt wird jedoch nix... "su -c" funktioniert übrigens auch nicht.
Ein "su" am Anfang würde das Problem lösen, ich will aber die root-Rechte nur genau da, wo ich sie unbedingt brauch. Deswegen wäre "sudo" ja sogar noch besser.
 
Zuletzt bearbeitet:
@moagnus: sorry dann hab ich dich wohl falsch verstanden, aber was hast du dann damit gemeint:
Bei dem Level lassen wir Sinn oder Unsinn doch einfach mal dahingestellt

dachte du meinst mit "dem level" dein können oder so, was meintest damit?

ja sudo wäre wohl besser, ansonsten weiß ich nicht warum er nicht unmounted. vielleicht ein logik-problem kommt er überhaupt an die stelle komme ne fehlermeldung eine passwort-abfrage... ?
 
Zurück
Oben