Seite 1 von 1

Verzweigungen werden nicth ausgeführt

Verfasst: Fr 29 Sep 2006, 12:05
von andreasM
hallo zusammen,

ich habe ein kleines Kopier-Skript...

Code: Alles auswählen

#!/bin/sh

if ls /mnt/filme/test34
cd /hdd
 then mv * /mnt/filme
 msgbox size=32 refresh=2 timeout=30 title="Transfer zur NSLU2 abgeschlossen" popup="Transfer ist beendet"
else
msgbox size=32 refresh=2 timeout=60 title="NSLU2 ist nicht erreichbar" popup="NSLU2 konnte nicht erreicht werden."
fi
exit 0
das Problem ist, dass die else-Bedingung nicht ausgeführt wird. Ich habe die NSLU für einen Test ausgeschaltet und dann das Skript gestartet - es kam auch eine Erfolgsmeldung, obwohl die Datei dann nicht verfügbar ist.
Kann mir da jemand einen Tipp geben?
Das zweite ist, warum kann ich das Plugin im Timer nicht einfach auswählen, sondern muss es händisch eintragen? Ich hatte woanders gelesen das man die Plugins auch einfach auswählen kann.

vielen Dank schon mal im vorraus

Andreas

Verfasst: Fr 29 Sep 2006, 13:19
von MOhlmann
#!/bin/sh

if ls /mnt/filme/test34 ;then
cd /hdd
then mv * /mnt/filme
msgbox size=32 refresh=2 timeout=30 title="Transfer zur NSLU2 abgeschlossen" popup="Transfer ist beendet"
else
msgbox size=32 refresh=2 timeout=60 title="NSLU2 ist nicht erreichbar" popup="NSLU2 konnte nicht erreicht werden."
fi
exit 0
Sollte dann gehn.

Gruß Michael

Verfasst: Fr 29 Sep 2006, 13:23
von DrStoned
Deine if-Abfrage kann so nicht funktionieren. Probiere mal das hier:

Code: Alles auswählen

#!/bin/sh 

ls /mnt/filme/ # dient zum Aufwecken der Netzwerkfestplatte 
sleep 3 # Verzögerung muss angepasst werden
if [ -e /mnt/filme/test34 ]; then
   cd /hdd 
   mv * /mnt/filme 
   msgbox size=32 refresh=2 timeout=30 title="Transfer zur NSLU2 abgeschlossen" popup="Transfer ist beendet" 
else 
   msgbox size=32 refresh=2 timeout=60 title="NSLU2 ist nicht erreichbar" popup="NSLU2 konnte nicht erreicht werden." 
fi 
exit 0
Dein Skript muss die Endung *.sh haben also z.B. sicherung.sh

Es benötigt ausserdem noch eine passende *.cfg also z.B. sicherung.cfg

Code: Alles auswählen

type=3
name=HDD-Sicherung - Daten sichern
desc=Filme auf Netzwerk sichern
needfb=0
needrc=0
needvtxtpid=0
needoffsets=0
Beide Dateien nach /var/tuxbox/plugins/ kopieren. Die *.sh ausführbar machen. Dann Plugins neu laden oder Box neu starten.

Verfasst: Fr 29 Sep 2006, 15:43
von andreasM
Hallo DrStoned & Michael,

danke für eure Antworten.

if [ -e mnt/filme/test34 ]; then

irgendwie klappt das nicht - es wird immer nur die Else - Anweisung ausgeführt.... vorher hatte zumindest das mv - Kommando immer geklappt.
hab jetzt auch schon if [ls -e /mnt/filme/test34]; then als Bedingungszeile verwendet, da das zumindest direkt auf der konsole die Datei zurückgibt, aber für das Plugin brachte das keine Änderung.

Was auch sehr störend ist : am ende des Skripts kommt immer eine Box - Pluginausgabe und als Text msgbox Message Box Version 1.52 - kann man das abstellen?

Derzeitig sieht der Code der sh-Datei so aus:

Code: Alles auswählen

#!/bin/sh
ls /mnt/filme/ >$inhalt
sleep 5
if [ls -e /mnt/filme/test34]; then
  cd /hdd
  mv * /mnt/filme
  msgbox size=32 refresh=2 timeout=30 title="Transfer zur NSLU2 abgeschlossen" popup="Transfer ist beendet" $inhalt
else
msgbox size=32 refresh=2 timeout=60 title="NSLU2 ist nicht erreichbar" popup="NSLU2 konnte nicht erreicht werden."
fi
exit 0
Wenn alles nichts hilft nehm ich die Prüfung halt wieder raus - bisher hat das Plugin ja auch ohne Prüfung funktioniert... wär halt nur schön gewesen.


schöne Grüße

Andreas

Verfasst: Fr 29 Sep 2006, 15:45
von usul
andreasM hat geschrieben:if [ -e mnt/filme/test34 ]; then
if [ -e /mnt/filme/test34 ]; then

Die Pfadangabe sollte schon stimmen. Sonst sucht er relativ zum aktuellen Verzeichnis.

cu
usul

Verfasst: Fr 29 Sep 2006, 16:17
von DrStoned
Sorry den / hatte ich vergessen.
#!/bin/sh
ls /mnt/filme/ >$inhalt
sleep 5
if [ls -e /mnt/filme/test34 ]; then
cd /hdd
mv * /mnt/filme
msgbox size=32 refresh=2 timeout=30 title="Transfer zur NSLU2 abgeschlossen" popup="Transfer ist beendet" $inhalt
else
msgbox size=32 refresh=2 timeout=60 title="NSLU2 ist nicht erreichbar" popup="NSLU2 konnte nicht erreicht werden."
fi
exit 0
Mach das ls raus, dann funktionierts. Und stelle sicher, dass in Deinem Verzeichnis auf /mnt/filme/ eine Datei namens test34 existiert. Und nach test34 muss ein Leerzeichen rein.
Wieso kopierst Du nicht einfach mein Beispiel? Habs jetzt oben korrigiert.

Die Messageboxanzeige bleibt drin, geht nur weg, wenn man statt popup den Parameter msg verwendet. Warum keine Ahnung, vermutlich wird da eine Variable übergeben, die das Neutrino für Skripte kurz anzeigt.

Verfasst: Fr 29 Sep 2006, 16:30
von andreasM
Hallo usul,

also test34 ist eine Datei. Die hab ich nur deswegen angelegt. Unter DOS kann man ja nach nul fragen. Meine Linux-Kenntnisse sind leider etwas angestaubt..


Wenn ich -e /mnt/filme/test34 auf der Kommandozeile (telnet dbox) eingebe, erhalte ich nur

Code: Alles auswählen

 -sh: -e: not found
müsste da dann nicht eine andere Rückgabe kommen?

Gibt es irgendwo eine Befehlsübersicht, was man alles ansprechen kann? Die Messagebox will ich eigendlich auch wegklicken können.


Schöne Grüße


Andreas

Verfasst: Fr 29 Sep 2006, 16:36
von DrStoned
Lies mal meinen meinen oberen Post durch, das -e kann so nicht funktionieren, da es ein Parameter für if ist.

http://www.selflinux.org/selflinux/html ... erung.html
Gibt es irgendwo eine Befehlsübersicht, was man alles ansprechen kann? Die Messagebox will ich eigendlich auch wegklicken können.
Für die Messagebox findest Du alle möglichen Parameter in der readme.txt dieses Plugins.

Verfasst: Fr 29 Sep 2006, 17:09
von andreasM
DrStoned hat geschrieben:Lies mal meinen meinen oberen Post durch, das -e kann so nicht funktionieren, da es ein Parameter für if ist.

http://www.selflinux.org/selflinux/html ... erung.html


Für die Messagebox findest Du alle möglichen Parameter in der readme.txt dieses Plugins.


vielen Dank - jetzt funktioniert es perfekt! (na ja die $inhalt wird nicht ausgegeben... aber das muss nicht sein)
Der Link auf die Shellprogrammierung ist wirklich absolut klasse. Werde mich mal da einarbeiten.

so klappt es jetzt - beide Bedingungen werden ausgeführt-je nachdem was zutrifft.

Code: Alles auswählen

#!/bin/sh
ls /mnt/filme/ >$inhalt
sleep 3
if [ -e /mnt/filme/test34 ]; then
  cd /hdd
  mv * /mnt/filme
  msgbox size=32 refresh=2 timeout=30 title="Transfer zur NSLU2 abgeschlossen" popup="Transfer ist beendet" $inhalt
else
msgbox size=32 refresh=2 timeout=60 title="NSLU2 ist nicht erreichbar" popup="NSLU2 konnte nicht erreicht werden."
fi
exit 0
schöne Grüße

Andreas

Verfasst: Fr 29 Sep 2006, 17:43
von usul
andreasM hat geschrieben:(na ja die $inhalt wird nicht ausgegeben... aber das muss nicht sein)

ls /mnt/filme/ >$inhalt
Gehe mal in die Richtung (Die Art wie du $inhalt später einsetzt (als Parameter der messagebox) ist AFAIK aber falsch. Schau dafür nochmal in die Doku):

inhalt=`ls /mnt/filme/`

(Auch wirklich diese "Hochkommas" verwenden)

Zum testen auf der Shell kannst du:
inhalt=`ls /mnt/filme`; echo $inhalt

cu
usul

Verfasst: Fr 29 Sep 2006, 18:03
von andreasM
Hallo usul,
Gehe mal in die Richtung (Die Art wie du $inhalt später einsetzt (als Parameter der messagebox) ist AFAIK aber falsch. Schau dafür nochmal in die Doku):

inhalt=`ls /mnt/filme/`
danke für deinen Hinweis... in der Readme zur Messagebox bin ich zwar nicht fündig geworden, dafür im Code von mem-check. Das hab ich angepasst - und es funktioniert!


:D :D :D

schöne Grüße

Andreas