WinFuture-Forum.de: Shell Script In Ein Batch Script Umschreiben - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Shell Script In Ein Batch Script Umschreiben


#1 Mitglied ist offline   Crapshit 

  • Gruppe: aktive Mitglieder
  • Beiträge: 216
  • Beigetreten: 14. September 06
  • Reputation: 0

  geschrieben 26. Oktober 2006 - 08:35

Also wie oben schon gesagt geht es darum ein Shell Script in ein Batch Script umzusetzen.
Dies ist erstmal mein Shell Script:

#!/bin/ksh 

#------------------------------------------------------------------------------ 
# execute CenteraPing 
#------------------------------------------------------------------------------ 

cd /..../.... 

./CenteraPing -address 10.78.224.21,10.78.224.22,10.78.224.23,10.78.224.2
4,10.78.224.25,10.78.224.26,10.78.224.27,10.78.224
.28 > /tmp/ausgabe.txt 2>&1 


if [ $(grep "Message" /tmp/ausgabe.txt|wc -l) -gt 0 ]; then 
	   /opt/nimbus/bin/nimalarm -l 5 -s Centera "Kann mehrere IP Adressen nicht erreichen!!!"; 
fi


So jetzt besteht mein Problem daraus, dass ich nicht genau weiß, wie ich diesen Teil umsetzen muss:

if [ $(grep "Message" /tmp/ausgabe.txt|wc -l) -gt 0 ]; then 
	   /opt/nimbus/bin/nimalarm -l 5 -s Centera "Kann mehrere IP Adressen nicht erreichen!!!"; 
fi


Also ich suche nach "Message" in der Datei "ausgabe.txt" und zähle wie oft das Wort "Message" in der Textdatei drinne steht. Umso öfter es drinne steht um so gravierender ist ein Fehler. Oben frage ich erstmal ab, ob es Fehler gibt und ob es mehr als 0 sind. Später kann ich die "0" bis "8" erhöhen, weil ich oben ein Aufruf von 8 IP-Adressen mache. Wenn alle nicht erreischbar sind ist es halt der gravierenste Fehler.

So vielleicht kann mir ja jemand hier in einem Linux Forum helfen.
*gg* bidde
0

Anzeige



#2 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 26. Oktober 2006 - 11:48

Moin,

also, diesen Teil
grep "Message" /tmp/ausgabe.txt|wc -l

kannst du ersetzen mit
for /f "tokens=1,2,* delims=/:; " %%i IN ('find /C "Message" ausgabe.txt') DO (
echo %%k
)

Das echo dient nur der Ausgabe, die Anzahl befindet sich in %%k.
P.S.: Ist jetzt bischen auf die Schnelle, falls in einer Zeile mehrmals "Message" vorkommt, wird das nur
einmal gezählt.

Dieser Beitrag wurde von MNG bearbeitet: 26. Oktober 2006 - 11:49

0

#3 Mitglied ist offline   Crapshit 

  • Gruppe: aktive Mitglieder
  • Beiträge: 216
  • Beigetreten: 14. September 06
  • Reputation: 0

geschrieben 26. Oktober 2006 - 13:18

Danke für die Antwort,

eine Frage habe ich noch. Also dein Code funktioniert mit dem echo wunderbar,
nur will ich kein echo sondern ein programmaufruf machen

also nach dem DO soll eine Abfrage auf %%k kommen was für ein wert sich dahinter versteckt.
z.b. der Wert wäre 1

DO (
if %%k EQU 1
(
  call C:\Programme\NimBUS\bin\nimalarm.exe -c 10.78.224.2 -l 1 -s Centera "Kann eine IP Adressen nicht erreichen!!!";
)


Der Programmaufruf an sich funktioniert einwandfrei. Es geht nur darum wie ich jetzt nach der ermittlung des Wertes %kk eine entsprechende abfrage auf %%k hinbekomme, sodass je nach dem welchen wert %%k beinhaltet andere Programmaufrufe passieren.

Dies würde ich innerhalb des DOs mit IF-ELSE machen, was bei mir aber noch nicht so recht funktioniert bzw funktionieren will?

Geht das überhaupt ?
0

#4 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 26. Oktober 2006 - 14:19

Moin,

sicher geht das. Einfach das Echo weg und die Fallunterscheidung rein:
@echo off
for /f "tokens=1,2,* delims=/:; " %%i IN ('find /C "Message" ausgabe.txt') DO (
if %%k EQU 0 echo Keine Fehler.

if %%k GEQ 1 echo Es gab %%k Fehler!
if %%k GEQ 1 call pause
)

Das gibt jetzt die Zahl der Fehler aus und ruft den Befehl "pause" auf, sobald mehr als einmal "Message" gefunden wurde. In deinem Fall wäre es statt "pause" dann wohl "C:\Programme\NimBUS\bin\nimalarm.exe"
0

#5 Mitglied ist offline   Crapshit 

  • Gruppe: aktive Mitglieder
  • Beiträge: 216
  • Beigetreten: 14. September 06
  • Reputation: 0

geschrieben 26. Oktober 2006 - 14:22

Komisch macht er bei mir nicht
0

#6 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 26. Oktober 2006 - 14:58

Welche Fehlermeldung kommt denn?
0

#7 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 26. Oktober 2006 - 15:53

Warum nimmst du nicht einfach wc.exe und vielleicht auch grep.exe aus GnuWin32, UnxUtils oder von mir auch Cygwin oder 'Utilities and SDK for UNIX-based Applications'?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#8 Mitglied ist offline   Crapshit 

  • Gruppe: aktive Mitglieder
  • Beiträge: 216
  • Beigetreten: 14. September 06
  • Reputation: 0

geschrieben 27. Oktober 2006 - 06:50

Also den Aufruf der CenteraPing.exe macht er. Er legt eine txt im angegebenen Verzeichniss an.
Er bringt keine Fehlermeldung.
Befehl "Pause" wird normal ausgeführt, sodass man bestätigen muss.

@echo off

REM -----------------------
REM   execute CenteraPing
REM -----------------------

REM cd X:\...\...



call CenteraPing.exe -address 

10.78.224.2,10.78.224.22,10.78.224.23,10.78.224.24
,10.78.224.25,10.78.224.26,10.78.224.27,10.78.224.
28 > 

C:\Temp\centera\ausgabe.txt 2>&1

for /f "tokens=1,2,* delims=/:; " %%i IN ('find /C "Message" C:\Temp\centera\ausgabe.txt') DO (

if %%k EQU 1 call C:\WINDOWS\notepad.exe
)
pause


So sieht der Inhalt der Textdatei aus. Also das ein Message vorhanden ist .....


10.78.224.2 is not accessible
SDK Error :-10020
SDK Error Message :No connection with any pool
10.78.224.22 is accessible
10.78.224.23 is accessible
10.78.224.24 is accessible
10.78.224.25 is accessible
10.78.224.26 is accessible
10.78.224.27 is accessible
10.78.224.28 is accessible
0

#9 Mitglied ist offline   Crapshit 

  • Gruppe: aktive Mitglieder
  • Beiträge: 216
  • Beigetreten: 14. September 06
  • Reputation: 0

geschrieben 27. Oktober 2006 - 07:05

C:\Dokumente und Einstellungen\user\Desktop\Windows Centera>REM ----------------
-------

C:\Dokumente und Einstellungen\user\Desktop\Windows Centera>REM execute Center
aPing

C:\Dokumente und Einstellungen\user\Desktop\Windows Centera>REM ----------------
-------

C:\Dokumente und Einstellungen\user\Desktop\Windows Centera>REM cd X:\...\...

C:\Dokumente und Einstellungen\user\Desktop\Windows Centera>call CenteraPing.exe
-address 10.78.224.2,10.78.224.22,10.78.224.23,10.78.224.24
,10.78.224.25,10.78.
224.26,10.78.224.27,10.78.224.28 1>C:\Temp\ausgabe.txt 2>&1

C:\Dokumente und Einstellungen\user\Desktop\Windows Centera>for /F "tokens=1,2,*
delims=/:; " %i IN ('find /C "Message" C:\Temp\ausgabe.txt') DO (if %k EQU 1 ca
ll C:\Programme\NimBUS\bin\nimalarm.exe -c 10.78.224.2 -l 1 -s Centera "Kann ein
e IP Adressen nicht erreichen!!!"; )

C:\Dokumente und Einstellungen\user\Desktop\Windows Centera>(if \TEMP\AUSGABE.TX
T: 1 EQU 1 call C:\Programme\NimBUS\bin\nimalarm.exe -c 10.78.224.2 -l 1 -s Cent
era "Kann eine IP Adressen nicht erreichen!!!"; )

C:\Dokumente und Einstellungen\user\Desktop\Windows Centera>pause
Drücken Sie eine beliebige Taste . . .
0

#10 Mitglied ist offline   Crapshit 

  • Gruppe: aktive Mitglieder
  • Beiträge: 216
  • Beigetreten: 14. September 06
  • Reputation: 0

geschrieben 27. Oktober 2006 - 07:45

Okay habs rausgefunden. Lag an

delims=/:;

Wenn ich den Doppelpunkt als Trennzeichen rausnehme, macht er es.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0