PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash: "if" Ergebnis wird ignoriert..??



EliasP
13-04-2003, 21:26
Hi
Bin absoluter Bash-Anfänger, sieht man wohl auch an folgendem Script ;))
Ich hab mir das geschrieben, dass ich mit einem Klick die Digicam mounte, den Konqueror im entsprechenden Verzeichnis öffne und beim Schließen des Konquerors die Cam automatisch wieder ungemountet wird.
Hab probiert das ganze mit "Routinen" zu verbinden, die prüfen, ob die Cam überhaupt eingesteckt ist oder nicht, denn wenn ich probiere /dev/sda1 zu mounten und es nicht vorhanden ist, muss ich neustarten um es wieder zum Funktionieren zu bringen.
Wenn ich jetzt das Script ausführe bekomme ich immer die eingebaute Fehlermeldung: "Die Gerätedatei existiert nicht. Vermutlich ist die Kamera nicht angeschlossen oder auf PC-Transfer geschalten.", obwohl in diesem Fall das Script ja fortfahren sollte, die Cam mounten und den Konqueror öffnen.

Ich verwende Gentoo-1.4, devfsd, hotplug, Kernel 2.4.20, Bash-2.05b-r3....

Hier das Script:



#!/bin/sh
if [ ! -d /dev/sda1 ]
then
kdialog --error "Die Gerätedatei existiert nicht. Vermutlich ist die Kamera nicht angeschlossen oder auf PC-Transfer geschalten."
exit 0
fi
if [ -d ~/.kde/share/thumbnails ]
then
rm -r ~/.kde/share/thumbnails
fi
if [ -d /mnt/camera/dcim ]
then
konqueror /mnt/camera/dcim/100image && umount /mnt/camera && exit 0
fi

if [ ! -d /mnt/camera/dcim ]
then
mount /mnt/camera && konqueror /mnt/camera/dcim/100image/ && umount /mnt/camera
fi
exit 0

if [ ! -d /mnt/camera/dcim ]
then
kdialog --error "Die Digitalkamera ist nicht eingesteckt, bzw. sie ist nicht auf PC-Transfer geschalten. \
Bitte auf PC-Transfer schalten durch Drehen des Rades auf ganz linke Position."
fi
exit 0


Gruß

Elias P.

anda_skoa
14-04-2003, 10:31
Original geschrieben von EliasP
[B]
Wenn ich jetzt das Script ausführe bekomme ich immer die eingebaute Fehlermeldung: "Die Gerätedatei existiert nicht. Vermutlich ist die Kamera nicht angeschlossen oder auf PC-Transfer geschalten.", obwohl in diesem Fall das Script ja fortfahren sollte, die Cam mounten und den Konqueror öffnen.


Du hast dort in dem then Teil ein exit 0 drinnen, da kann es nur beenden.

Ciao,
_

EliasP
14-04-2003, 18:18
Sorry, hab mich missverständlich ausgedrückt...
an dieser Stelle sollte das Skript ja die "then" Bedingung gar nicht ausführen, wenn die Datei vorhanden ist... aber selbst wenn die Datei vorhanden ist, wird diese "then"-Folge ausgeführt...

Gruß

Elias P.

anda_skoa
14-04-2003, 20:01
Nunja, /dev/sda1 wird halt einfach nie ein Verzeichnis sein, schätze ich.

Normalerweise ist das der Devicenode der ersten Partition der ersten SCSI Harddisk

Ciao,
_

EliasP
14-04-2003, 20:08
Ähm, jo, das war mir klar, nur hab ich gedacht könnte man das mit der selben Methode checken... mit was check ich dann Dateien ?
Sorry für die dummen Fragen, bin absoluter Bash-Newbie und hab das alles ohne irgendne Doku gemacht...

Gruß

Elias P.

anda_skoa
14-04-2003, 20:30
Ich denke du nimmst am besten -b
Aus der man Page von bash



-b file
True if file exists and is a block special file.


Ciao,
_

EliasP
15-04-2003, 22:41
Hmm, hab mir das jetzt nochmal durchgeguckt, n paar kleine Änderungen vorgenommen, im Moment sieht das ganze so aus:



#!/bin/sh

if [ ! -b /dev/sda1 ]
then
kdialog --error "Die Gerätedatei existiert nicht. Vermutlich ist die Kamera nicht angeschlossen oder auf PC-Transfer geschalten."
exit 0
fi

if [ -d ~/.kde/share/thumbnails ]
then
rm -r ~/.kde/share/thumbnails
fi

if [ -d /mnt/camera/dcim ]
then
konqueror /mnt/camera/dcim/100image && umount /mnt/camera && exit 0
fi

if [ ! -d /mnt/camera/dcim ]
then
mount /mnt/camera && konqueror /mnt/camera/dcim/100image/ && umount /mnt/camera
exit 0
fi

if [ ! -d /mnt/camera/dcim ]
then
kdialog --error "Die Digitalkamera ist nicht eingesteckt, bzw. sie ist nicht auf PC-Transfer geschalten. \
Bitte auf PC-Transfer schalten durch Drehen des Rades auf ganz linke Position."
fi
exit 0


Wenn ich jetzt das Script starte, die Digicam ist ausgesteckt, hotplug/devfsd hat /dev/sda1 nicht angelegt, probiert er trotzdem zu mounten, obwohl das Script ja eigentlich durch das "exit 0" beendet werden müsste, wenn /dev/sda1 nicht vorhanden ist...



elias@elias elias $ /home/global/digicam
mount: Kein Medium gefunden


Irgendwas läuft da falsch, entweder ich hab nen absoluten Blödsinnsfehler drin oder ich versteh die Welt nimmer ;))

Hat schonmal jemand so ein ähnliches Script realisiert ?

Gruß und Danke für die bisherige Hilfe !!

Elias P.

anda_skoa
15-04-2003, 22:52
Kommt er in den then Teil?

Wenn nicht, bist du sicher, dass der Devicenode nicht da ist?

Ciao,
_

EliasP
15-04-2003, 23:08
Hmm
Ich glaub ich sollte mal nen grundsätzlichen Bash-Kurs durchmachen.. ;))
Hab grad nämlich ehrlichgesagt keine Ahnung, ob der then-Block auch abgeschlossen werden muss, so wie der if-Block durch fi...
Kennt jemand Online was brauchbares ?? Sonst werd ich mal in Buchladen rennen müssen.

Gruß

Elias P.

anda_skoa
16-04-2003, 09:50
Original geschrieben von EliasP
Hmm
Ich glaub ich sollte mal nen grundsätzlichen Bash-Kurs durchmachen.. ;))
Hab grad nämlich ehrlichgesagt keine Ahnung, ob der then-Block auch abgeschlossen werden muss, so wie der if-Block durch fi...


Muss er nicht, wenn ich mich recht erinnere.
Eventuell brauchst du einen ; nach dem letzten Command im Then Teil.

Ciao,
_

buffer_7
04-05-2003, 12:55
@EliasP.

Hallo,

also bei Deinem Test auf sda1 ist das Problem, daß das Blockdevice /dev/sda1 immer existiert, egal ob da ne Kamera angeschlossen ist oder nicht.
Du müßtest Dir ein anderes Testkriterium überlegen. Soll er doch versuchen, ob er mounten kann.
Kann er nicht, dann gib ne Fehlermeldung aus, kann er, dann gehts normal weiter.

hoffe das hilft Dir

Ihr und Euer

buffer_7

EliasP
04-05-2003, 21:24
Eigentlich dürfte sda1 nicht immer existieren, dank devfs...
das ist ja das Problem, mit dem ich unter anderem kämpfe ;(

Gruß

EliasP.