Shell-Script

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tooobi
Beiträge: 3
Registriert: 18.08.2006 09:20:35

Shell-Script

Beitrag von tooobi » 18.08.2006 09:38:08

Servus Leute.

Eins vorne weg, ich bin kein Profi was Linux betrifft, allerdings auch kein Anfänger was Programmierung betrifft.
Mein Problem liegt an einem Shell-Script das alle 5 Minuten per Crontab ausgeführt wird bzw. nicht ausgeführt wird.
Das Script selbst wurde nach bestem Wissen und Gewissen zusammengegoogled, allerdings ist es noch nicht ganz perfekt, ich vermute mal es fehlt noch ein kleiner Anstoß.

Hier erstmal mein Script:
#!/bin/sh

cat /pfad/zur/Datei.txt | while
read line ; do

if ("$line" == "login") then

cd /pfad/in/ein/Verzeichnis
sh datei.bat
Echo "Login"

elif

("$line" == "logout") then
killall java
Echo "Logout"

fi
done
So sieht mein Script aus.
Die Datei.txt beinhaltet jediglich das wort login oder logout und wird per PHP-Script eingetragen bzw. umgeschrieben.
Alle Pfade stimmen, die datei.bat ist auch funktionsfähig, sowohl die Datei.txt noch die Datei vom Shell-Script selbst und die datei.bat sind alle auf CHMOD 777 (testweise).

Hintergrund des ganzen Scriptes ist eine einfache Steuerung einer Java-Anwendung die auf "knopfdruck" gestartet bzw. beendet werden soll, also auch für Nutzer der HP die selbstverständlich keinen SSH-Zugang haben.

Von diesem Script aus bekomme ich weder ein Echo ausgegeben noch eine andere Funktion.

Für den einen oder anderen ist das bestimmt auf den ersten Blick ersichtlich wo sich der Fehler befindet, ich verlange auch keines Wegs die vollständige Gesamtlösung (Wäre natürlich nett :-) ), nur ich weiss leider nicht mehr weiter nachdem ich die halbe Nacht damit "gekämpft" habe.

Im Vorraus schonmal vielen Dank für die Hilfe!

Noch was vergessen: Mein System ist ein Server mit Debian Linux 3.1

balduin222
Beiträge: 147
Registriert: 07.04.2005 19:51:42

Beitrag von balduin222 » 18.08.2006 09:53:49

Hallo,

vorab zur Info: Programmieren ist NICHT mein Ding. Aber füge mal in die 2. Zeile deines Scripts das hier ein

Code: Alles auswählen

set -xv
Jetzt solltest du beim Ausführen ein bisschen mehr Output bekommen. Vielleicht bringt dich das ja weiter.

Gruß
balduin222

Benutzeravatar
swiffer
Beiträge: 81
Registriert: 10.04.2005 11:58:10
Wohnort: Wickede

Beitrag von swiffer » 18.08.2006 10:19:19

Hi
("$line" == "login")
du solltest dir angewoehnen ein x zwischen " und $ zu schreiben. dann bekommst du eine fehlermeldung wenn die variable leer ist.
Fueg doch mal testausgaben ein
echo "er kommt bis hier"
echo "und bis hier auch"
usw.
so kannst du sehen bis wohin dein script abgearbeitet wird.

--
stefan
UNIX is user-friendly. It's just not ignorant-friendly and idiot-friendly.

sansib
Beiträge: 48
Registriert: 20.08.2004 13:05:45

Beitrag von sansib » 18.08.2006 11:30:39

versuch es mal so

Code: Alles auswählen

#!/bin/sh

cat text.txt | while
read line ; do

  if [ $line = "login" ]
  then

        cd /pfad/in/ein/Verzeichnis
        sh datei.bat
        Echo "Login"
  elif [ $line = "logout" ]
  then
        killall java
        Echo "Logout"
  fi
done
Die if Anweisungen müssen in rechteckigen Klammern [] gesetzt werden.
Grüsse sansib

Edit by Snoopy:
Tags eingefügt

tooobi
Beiträge: 3
Registriert: 18.08.2006 09:20:35

Beitrag von tooobi » 18.08.2006 12:04:44

balduin222 hat geschrieben:Hallo,

vorab zur Info: Programmieren ist NICHT mein Ding. Aber füge mal in die 2. Zeile deines Scripts das hier ein

Code: Alles auswählen

set -xv
Jetzt solltest du beim Ausführen ein bisschen mehr Output bekommen. Vielleicht bringt dich das ja weiter.

Gruß
balduin222
Bei dem Befehl erscheint das Script + 2 Zeilen zusätzlich:

Code: Alles auswählen

cat /pfad/zur/Datei.txt | while
read line ; do
echo $line
if [$line = "login"]
 then
    cd /pfad/in/ein/verzeichnis
    sh datei.bat
    echo "$line Start"
elif [$line = "logout"]
 then
    killall java
    echo "$line Ende"
fi
done
+ cat /pfad/zur/Datei.txt
+ read line
Hab jetzt auch 3 Echo's drin, allerdings wird keins ausgegeben. Sieht fast so aus wie wenn $line leer ist. die Datei ist vorhanden, auch gefüllt und CHMOD 777
swiffer hat geschrieben:Hi
("$line" == "login")
du solltest dir angewoehnen ein x zwischen " und $ zu schreiben. dann bekommst du eine fehlermeldung wenn die variable leer ist.
Fueg doch mal testausgaben ein
echo "er kommt bis hier"
echo "und bis hier auch"
usw.
so kannst du sehen bis wohin dein script abgearbeitet wird.

--
stefan
Öhm.. Bringt trotzdem keine Meldung. "x$line" meinst du doch?


OK.. Nochmal nachgeschaut, der liest definitiv nichts aus der Datei aus! Obwohl was drin steht

tooobi
Beiträge: 3
Registriert: 18.08.2006 09:20:35

Gelöst

Beitrag von tooobi » 18.08.2006 17:00:09

Alles klar, Problem gefunden!
Danke für eure Mithilfe

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 18.08.2006 17:22:34

swiffer hat geschrieben:du solltest dir angewoehnen ein x zwischen " und $ zu schreiben. dann bekommst du eine fehlermeldung wenn die variable leer ist.
Das x ist nur nötig, wenn keine Anführungszeichen verwendet werden. Da die Shell nämlich stumpf die Variablen einsetzt wird aus

Code: Alles auswählen

if $foo == $bar
ein

Code: Alles auswählen

 if == blubb
, falls foo="" und bar="blubb", was natürlich einen Syntaxfehler nach sich zieht.

Antworten