Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash Skript
zielscheibe
20.10.05, 14:41
Ich will per Skript einen Rechner erst anpingen und wenn das geht
abfragen ob er auf SNMP Anfragen antwortet.
Irgendwo ist ein Fehler drin, aber ich finde ihn net...
if [ "$#" -lt "1" ]; then
echo Namen des Netzelementes angeben --- Programmabbruch!!!
exit 1
fi
echo Pinge 4x zu Host -------'>' $1
if [ ping -c4 $1 ]; then
echo Teste SNMP -------'>' $1
if [ snmpwalk -v 1 -c public $1 system ]; then
echo "Alles OK :-)"
else
echo SNMP nicht verfuergbar
fi
else
echo Host nicht erreichbar
fi
Havoc_1986
20.10.05, 14:54
Was gibt er denn aus, wenn du das script startest???
Was sagen die logs???
Ohne Infos wird das schwer...
sicher, dass das nicht vielleicht
if (ping ...)
heissen muss?
echo Namen des Netzelementes angeben --- Programmabbruch!!!
Schlagt mich nicht, wenn ich mich irre, aber müsste es nicht
echo "Namen des Netzelementes angeben --- Programmabbruch!!!"
heißen, da /bin/bash das sonst als viele verschiedene Argumente verarbeitet?
Das gleiche würde dann für die anderen "echo"s gelten (gegebenenfalls einzelquoten >'< benutzen).
sicher, dass das nicht vielleicht
Code:
if (ping ...)
heissen muss?
Nein, if-statements sehen in der bash so aus:
if [[ args ]]
then
## statements
# elif [[ args ]]
## statements
# else
## statements
fi
edit: einzelne Klammern gehen auch, sind aber soweit ich weiß schlechtere Praxis.
nun, meine bash kenntnisse sind nur rudimentaer, aber er will doch sicher den return-code von ping haben und das geht mit ()
[] ist doch, wenn ich mich richtig erinnere, ein synonym fuer 'test'
OpOs hat recht, probiers mal mit `if ( ping ... ) ; then ... ; fi'. Sollte funktionieren.
Tim Taylor
20.10.05, 20:56
So sollte es gehen. Den ersten Teil habe ich getestet (ping), SNMP habe ich unter Cygwin gerade nicht parat :p
Der 2. Teil sollte dann aber analog funktionieren.
#!/bin/bash
if [ $# -ne 1 ]
then
echo Namen des Netzelements angeben. Abbruch
exit 1
fi
echo "Starte ping ..."
ping -c4 $1
RC=$?
if [ $RC -ne 0 ]
then
echo "Ping nicht erfolgreich. Abbruch
exit 2
fi
zielscheibe
21.10.05, 07:44
Danke für die Ideen :)
Das Skript funktioniert jetzt.
Warum muß ich den Test aus der If-Bedingung nehmen wie unten ?
ping -c4 $1
RC=$?
if [ $RC -ne 0 ]
Das Programm sieht jetzt so aus:
if [ "$#" -lt "1" ]; then
echo Namen des Netzelemtes angeben --- Programmabbruch!!!
exit 1
fi
echo Pinge 2x zu Host -------'>' $1
ping -c2 $1 &> /dev/null
RC=$?
if [ $RC -eq 0 ]; then
echo ping ok
echo Teste SNMP -------'>' $1
snmpwalk -v 1 -c public $1 system &> /dev/null
RC=$?
if [ $RC -eq 0 ]; then
echo "Alles OK :-)"
else
echo SNMP nicht verfuergbar
fi
else
echo Host nicht erreichbar
fi
Hi,
ein bisschen weniger Code wäre:
if [ "$#" -lt "1" ]; then
echo Namen des Netzelemtes angeben --- Programmabbruch!!!
exit 1
fi
echo "Pinge 2x zu Host -------'>' $1"
if (ping -c2 $1 &> /dev/null); then
echo "ping ok"
echo "Teste SNMP -------'>' $1"
if (snmpwalk -v 1 -c public $1 system &> /dev/null); then
echo "Alles OK :-)"
else
echo "SNMP nicht verfuergbar"
fi
else
echo "Host $1 nicht erreichbar"
fi
nun, meine bash kenntnisse sind nur rudimentaer, aber er will doch sicher den return-code von ping haben und das geht mit ()
Meine sind wohl noch rudimentärer. Was die quotenzeichen angeht habe ich mich auch geirrt, wie ein einfacher Versuch gezeigt hat...
*liest sich `man bash` mal wieder durch*
Der Gestreifte
21.10.05, 17:25
Was die quotenzeichen angeht habe ich mich auch geirrt...
*liest sich `man bash` mal wieder durch**g*
Aber nimm bitte das normale Hochkomma
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.