if Schleife mit oder Abfrage

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
megazocker
Beiträge: 60
Registriert: 24.06.2007 20:28:57

if Schleife mit oder Abfrage

Beitrag von megazocker » 08.12.2008 16:40:44

Hallo,

ich habe vor ein Script für alle 4 srv zu nutzen und wollte nun das so lösen

WEBSRV=`hostname -s | cut -c 7-8`
if [ "x$WEBSRV" != "01" -o "x$WEBSRV" != "02" -o "x$WEBSRV" != "03" -o "x$WEBSRV" != "04" ]; then
echo "ERROR: Hostname is not a correct WEBSRV name (e.g. WEBSRV61)"
exit 1
fi

Ich ging davon aus das sich eventuell beim hostnamen ein tippfehler einschleichen könnte und wollte das in jedem Fall verhindern.
hostname WEBSRV ist überall gleich gefolgt von einem Oktett. was ich abfragen will. (muss statisch sein)

Es soll nach WEBSRV eine vorgegebene Zahl stehen 01 - 04

Ich dachte weiterhin das ich das wie oben hinbekomme was aber leider nicht klappt das nicht und ich weis trotz googlmania nicht weiter.

hat jemand einen Tipp ?

Danke

lhfloss
Beiträge: 261
Registriert: 07.10.2007 21:02:15
Lizenz eigener Beiträge: MIT Lizenz

Re: if Schleife mit oder Abfrage

Beitrag von lhfloss » 08.12.2008 17:04:01

If ist keine Schleife, sondern eine Bedingung, und wird nur einmal ausgeführt.
Für Schleifen nimmt man While.

Gruß, /root!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: if Schleife mit oder Abfrage

Beitrag von Duff » 08.12.2008 19:19:21

Du könntest auch eine case-Anweisung nehmen. Dort kannst du eine regex verwenden und dann eine bestimmte Aktion oder Funktion aufrufen und für alles andere gibst du die gewünschte Fehlermeldung aus.
Oh, yeah!

Benutzeravatar
goeb
Beiträge: 348
Registriert: 26.08.2006 18:12:08
Lizenz eigener Beiträge: MIT Lizenz

Re: if Schleife mit oder Abfrage

Beitrag von goeb » 08.12.2008 19:47:54

Naja, ob jetzt Schleife oder nicht / case oder if... in dem geposteten Codeschnipsel sind jedenfalls zwei Sachen falsch:
  • wenn schon "x$WEBSRV" dann sollte es auch "x01" sein
  • und überleg noch mal wann das Skript abbrechen soll, deine Bedingung so wie sie dasteht (auch wenn man Punkt 1 korrigiert) ist immer wahr - das Skript bricht also immer ab
MfG, gœb

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: if Schleife mit oder Abfrage

Beitrag von gms » 08.12.2008 21:07:47

z.B könntest du "-a" (and), statt "-o" (or) verwenden, oder du verwendest Pattern Matching:

Code: Alles auswählen

if [[ $WEBSRV != 0[1-4] ]]; then 
  echo "ERROR: ...."
  exit 1
fi
Gruß
gms

megazocker
Beiträge: 60
Registriert: 24.06.2007 20:28:57

Re: if Schleife mit oder Abfrage

Beitrag von megazocker » 09.12.2008 13:42:57

Hallo Leute

Danke habt mir sehr geholfen hier mal mein Ergebnis (bin script newbie)
die IP 's hab ich geändert

wenn es einer eleganter kann immer her damit (man muss es noch verstehen können)

#start
WEBSRV=`hostname -s | cut -c 7-8`
BIN_IFCONFIG=/sbin/ifconfig
IP_ETH=192.123.$WEBSRV.
IP_LO=122.100.9.
VON=50
BIS=152
RANGEIF=`seq $VON $BIS`

if [ $WEBSRV = "10" -o $WEBSRV = "20" -o $WEBSRV = "30" -o $WEBSRV = "40" ] ; then
for IFACE in $RANGEIF; do
$BIN_IFCONFIG eth1:$IFACE inet $IP_ETH$IFACE
$BIN_IFCONFIG lo:$IFACE inet $IP_LO$IFACE
done
echo "Hostname OK"
else
echo "Hostname not OK"
exit 0
fi
echo "Logival Interfaces coming up"

#stop
WEBSRV=`hostname -s | cut -c 7-8`
BIN_IFCONFIG=/sbin/ifconfig
IP_ETH=192.123.$WEBSRV.
IP_LO=122.100.9.
VON=50
BIS=152
RANGEIF=`seq $VON $BIS`
echo -n "Stopping ipaliases"
for IFACE in $RANGEIF; do
ifconfig eth1:$RANGEIF $IP_ETH$RANGEIF down
ifconfig lo:$RANGEIF $IP_LO$RANGEIF down
done
echo "Logical Interfaces down"

hab das ganze noch in ein case script verpackt .... toll

danke nochmal

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: if Schleife mit oder Abfrage

Beitrag von Duff » 09.12.2008 14:11:41

Würde die IF-Abfrage Schreibweise von gms verwenden.

Zudem brauchst du die identische Konfiguration nicht 2mal im Skript aufzuführen. Einmal reicht.

Eventuell das Starten und Stoppen in eine Funktion packen.
Oh, yeah!

Antworten