gansterjo2
Goto Top

Shell Script funktioniert nicht

Liebe Community

Wieder einmal habe ich ein Problem, diesmals gehts darum, dass ich ein Shell-Script (für einen Suse-Server) erstellen sollte, welches eine Logdatei erstellen sollte.

Die Shell-Datei sieht so aus:

  #!/bin/ksh
  ((i=0))
  while ((i<m)); do
  echo $i>>/var/log/ora.log      # do something
  ((i+=1))
  done


Wie Ihr erkennen könnt, sollte die Datei eine Ausgabe der variablen I in die Datei ora.log erstellen.

jedoch kommt jedes mal die Fehlermeldung:

bash: ./shell_script.sh: /bin/ksh^M: bad interpreter: No such file or directory


Diese Datei hat die Berechtigungen 755 und ich bin als root angemeldet, so versuchte ich diese Datei auszuführen.


Freundliche Grüsse

Gansterjo2

Content-Key: 190822

Url: https://administrator.de/contentid/190822

Printed on: April 24, 2024 at 08:04 o'clock

Mitglied: 60730
60730 Sep 06, 2012 at 09:14:50 (UTC)
Goto Top
Moin,

Von suse hab ich ja nicht so viel ahnung, aber joe gibts da sicherlich auch.
Welchen Texterzeuger hast du denn benutzt?
Member: SteinBeiser
SteinBeiser Sep 06, 2012 at 09:21:52 (UTC)
Goto Top
^M am ende der zeile deutet auf falsche dateiformat in diesem fall dos es wird ab unix benötigt.
im editor kann man meistens das dateiformat auf unix umschalten.
Member: Gansterjo2
Gansterjo2 Sep 06, 2012 at 09:32:25 (UTC)
Goto Top
Zitat von @60730:
Moin,

Von suse hab ich ja nicht so viel ahnung, aber joe gibts da sicherlich auch.
Welchen Texterzeuger hast du denn benutzt?

Ich hab das mit dem Notepad geschrieben, als *.sh abgespeichert und via FTP auf den Server geladen
Member: Lochkartenstanzer
Lochkartenstanzer Sep 06, 2012 at 09:39:47 (UTC)
Goto Top
moin,

einfach die datei passend umformatieren. Unixoide bBetriebssyteme benötigen nur LF (^J) und kein CR(^M)/CRLF(^M^J) für das Zeilenende.

BTW: es wäre eine gute Idee m zu initialisieren.

lks
Member: Lochkartenstanzer
Lochkartenstanzer Sep 06, 2012 at 09:40:39 (UTC)
Goto Top
Zitat von @Gansterjo2:
Ich hab das mit dem Notepad geschrieben, als *.sh abgespeichert und via FTP auf den Server geladen

Dann sollest Du bei textdateien den FTp-Client in den ASCII-Modus umschalten. Dann macht der solche Konvertierungen von selbst.

lks
Member: Lochkartenstanzer
Lochkartenstanzer Sep 06, 2012 at 09:42:10 (UTC)
Goto Top
Nachtrag:

Mit
which ksh 
kannst Du auch schauen, ob die betreffende Shell auch da ist, wo Du sie erwartest.

lks
Member: Gansterjo2
Gansterjo2 Sep 06, 2012 at 09:43:50 (UTC)
Goto Top
Hallo Zusammen

nun habe die oben geschriebene, Datei mit einem Vi-Editor, der sich auf dem Sles-Sever befindet geschrieben und wieder als *.sh-Datei abgespeichert.

Diese Datei hab ich auch dann ausgeführt, jedoch geschieht irgend wie nichts. Sprich die geplante Datei wird nicht ausgeführt.

Freundliche Grüsse

Gansterjo2
Mitglied: 60730
60730 Sep 06, 2012 at 09:45:47 (UTC)
Goto Top
Ot..
Was meint denn unser lochkartenstanzer mit dieser zeile?
Zitat von @Lochkartenstanzer:
moin,

BTW: es wäre eine gute Idee m zu initialisieren.

lks
Member: Alchimedes
Alchimedes Sep 06, 2012 at 09:52:18 (UTC)
Goto Top
Hallo,

die Testbedingung in der Whileschleife ist falsch.

m ist nicht bekannt.

Um Fehler zu finden koenntest Du das Script mit sh -x ./Dein Script ausfuehren.


Gruss
Member: Lochkartenstanzer
Lochkartenstanzer Sep 06, 2012 at 10:16:19 (UTC)
Goto Top
Zitat von @Gansterjo2:
Diese Datei hab ich auch dann ausgeführt, jedoch geschieht irgend wie nichts. Sprich die geplante Datei wird nicht
ausgeführt.

moin,

Schau mal hier. Da hatte ich dir schon einen Hinweis gegeben.

lks

PS: Timo hat Dich auch schon drarauf hingewiesen.
Member: Gansterjo2
Gansterjo2 Sep 06, 2012 updated at 11:22:13 (UTC)
Goto Top
Nochmals Hallo zusammen

Zuerst wollte ich mich bedanken, dass Ihr mir so viel Input gebt.


@Alchimedes stimmt du hast Recht... ich sollte die Variable m zuerst initialisieren...


Leider habe ich gerade Bemerkt, dass ich das Ganze nicht so codiert habe, wie ich es eigendlich haben wollte.

Das Ziel war, dass ich eine unbeendete Schleife erstelle.

Das Script würde in einer Batch von Windows so aussehen:

@echo off
set /a x=1
:back
echo Wert %x% >>ora.log
set Z=%x%+1
set /a x=%z%
ping -n 3 localhost >NUL
goto back

nun weiss ich nicht ob man das Shell-Script iwie ummodellieren kann...

Vielen Dank

Freundliche Grüsse
Member: Alchimedes
Alchimedes Sep 06, 2012 updated at 11:25:11 (UTC)
Goto Top
Hallo,

was willst Du denn mit einer unbeendeten Schleife?

kenn mich mit dem Scripten in der Dosbox nicht so gut aus.. aber ist die nicht auch case-sensitive ?? weil Z=%x%+1 und dann x=%z% ??

was willst Du denn eigentlich mit dem Script auf dem Linuxserver erreichen?

Die Scriptschleife oben umgeschrieben etwa so:

#!/bin/ksh
x=0
while [ $x -lt 0 ] /* edit.. jenachdem wie oft du die schleife ausfuehren willst... hier wuerde Sie nur einmal ausgefuehrt.. */
do
echo $x >> ora.log
x=`expr $x +1`
done

Gruss
Member: Lochkartenstanzer
Lochkartenstanzer Sep 06, 2012 updated at 11:25:18 (UTC)
Goto Top
was ist an

while true ; do ...
so schwierig?

Villeicht einfach mal nach ksh googlen?

lks
Member: Gansterjo2
Gansterjo2 Sep 06, 2012 at 11:55:35 (UTC)
Goto Top
Hallo zusammen

Vielen Dank für die Unterstützung.


ich vermute, dass ich den Rest auch noch alleine hinkrieg...

Ich wünsche euch noch einen schönen Nachmittag

Freundliche Grüsse

Gansterjo2