Problem mit ShellSkript

Post Reply
Message
Author
rbtuxli

Problem mit ShellSkript

#1 Post by rbtuxli »

Hallo Leuts

ich habe leider nicht allzuviel Erfahrung mit shellprogrammierung und komm daher nicht mehr weiter mit meinem Skript.

Mein Skript dient dazu den Status von zuvor definierten Anwendungen abzufragen und danach auszugeben.

Es läuft eigentlich alles wunderbar, bis auf die Ausgabe.

Ich habe im Programm die variablen Prog1, Prog2, Prog3, ..., ProgN welche den Status der Anwendungen speichern. Als weiteres habe ich die Variable ProgC welche als Wert die Anzahl der ProgX-Variablen besitzt.

Ich möchte jetzt, dass mein Programm das folgendermassen ausgibt:

echo Prog1
echo Prog2

2 Sekunden warten

echo Prog2
echo Prog3

2 Sekunden warten

...

Wenn alle Variabeln durchgelaufen sind, soll die wieder bei Prog1 angefangen werden, also eine endlos schlaufe.

ich habe aber keine Ahnung wie ich das realisieren könnte.

kann mir vielleicht jemand helfen?

klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#2 Post by klopskuchen »

Und wie sieht dein Script nun aus?
When all else fails, read the instructions .

rbtuxli

#3 Post by rbtuxli »

Code: Select all

#!/bin/sh
function readfile() {
 local File=$1
 local SaveTo=$2
 local -i counter=0

 while read line; do
  eval "$2[$counter]"=\'$line\'
  counter=$(($counter+1))
 done < $File

 eval "$3"=$counter
&#125;

ProgC = 2

if &#91; -f /srv/dat/mysql/rbtx2.pid &#93;; then
 Prog1="MySQL&#58; running"
else
 Prog1="MySQL&#58; stopped"
fi

if &#91; -f /srv/sys/bind/9.2.2/var/run/named.pid &#93;; then
 Prog2="BIND&#58; running"
else
 Prog2="BIND&#58; stopped"
fi
Anstelle des folgenden Bereichs müsste eben die untenerwähnte schlaufe kommen

Code: Select all

echo $Prog1
echo $Prog2
kannst du mir da helfen?

klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#4 Post by klopskuchen »

Als Beispiel eine while-Schleife die drei mal durchlaufen wird:

Code: Select all

c=1
while &#91; $c -le 3 &#93;
do
    echo $Prog1
    echo $Prog2 
    sleep 2s
    c=$&#91; $c+1 &#93;
done
Das ist nur ein Beispiel da ich die Ausführungsbedingung für deine Schleife nicht kenne.
Ich schätze am günstigsten wäre es gleich die beiden if-Verzweigungen in eine Schleife zu
packen:

Code: Select all

while &#91; Bedingung &#93;
do
     if &#91; -f /srv/dat/mysql/rbtx2.pid &#93;; then
     Prog1="MySQL&#58; running"
    else
     Prog1="MySQL&#58; stopped"
    fi
    echo $Prog1

    if &#91; -f /srv/sys/bind/9.2.2/var/run/named.pid &#93;; then
     Prog2="BIND&#58; running"
    else
     Prog2="BIND&#58; stopped"
    fi
    echo $Prog2 

    sleep 2s
done
Das ganze kann dann noch verkürzt werden in dem der in der if-Bedingung überprüfte Zustand
nicht über den Umweg einer Variablen abgefragt wird, sondern nach der jeweiligen if-Verzweigung einfach
ein String ausgegeben wird. Also gleich ein echo.

Sowas in der Art?
When all else fails, read the instructions .

rbtuxli

#5 Post by rbtuxli »

Erstmals danke für die schnelle Hilfe!

Das Skript soll natürlich nachher mehr als nur 2 Applikationen überprüfen.

der echo befehl wird dann auch umgeleitet auf eine LCD auf der nur zwei zeilen platz haben.

dann soll so immer gescrollt werden zwischen den Anwendungen:

Prog1
Prog2

2 Sekunden

Prog2
Prog3

...
Danach wieder von vorne:

ProgN
Prog1

und das ohne ende

ist das mit shellprogrammierung denn möglich?

klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#6 Post by klopskuchen »

Code: Select all

function mysql &#40;&#41; &#123;
if &#91; -f /srv/dat/mysql/rbtx2.pid &#93;; then
 echo "mysql running"
else
 echo "mysql stop"
fi 
&#125;
.
.
.
# irgendwo in einer Endlosschleife

mysql&#40;&#41;
apache&#40;&#41;
sleep 2s

clear
apache&#40;&#41;
bind&#40;&#41;
sleep 2s

clear
bind&#40;&#41;
rbtuxlis_superserver&#40;&#41;
sleep 2s
.
.
.
When all else fails, read the instructions .

rbtuxli

#7 Post by rbtuxli »

Vielen Dank!

Ich pack jetzt da noch ein:

Code: Select all

until false; do
done
rein und dann ist es genau das was ich benötige!

Nochmals vielen Dank für deine Hilfe!

Post Reply