Brauche Hilfe mit Shellskript

Moin!
Ich will ausnahmsweise mal völlig offtopic werden - weil ich weiß dass hier 'ne Menge begabteLeute rumlaufen. :wink:
Sonst muss ich es mit in irgendeinem Linux- oder Asterisk-Forum probieren.

Ich hab keine große Ahnung von Linux Shellskripten und hab offensichtlich grad ein Brett vorm Kopf.

Ich möchte mit einem Shellskript prüfen, ob meine Asterisk-Trunks online sind.
/usr/sbin/asterisk -rx ‚sip show registry‘ gibt folgendes aus:


Host                           dnsmgr Username       Refresh State                Reg.Time
sipconnect.sipgate.de:5060     N      12345@si       130 Registered           Thu, 05 Mar 2015 10:42:32
sipconnect.testserver1.de:506 N      56789@si       130 Registered           Thu, 05 Mar 2015 10:42:32
2 SIP registrations.

Wie man sieht, sind es 2 Trunks. Früher war es nur ein Trunk, da funktionierte bei mir folgendes Shellskript:


registry=`/usr/sbin/asterisk -rx 'sip show registry' | grep -q "Registered"`

if [ $? -eq 0 ]
then
     # bisschen kram ausführen wenn alles okay ist
else
    # bischen Kram ausführen im Fehlerfall (asterisk-reload etc.)
fi

exit 0


Da wird also einfach nach dem Wort „Registered“ gegreppt - wenn es da ist, ist alles okay, sonst eben nicht. Das funktioniert natürlich nicht mehr, wenn ich 2 Trunks habe, von dem ggf. nur eines ausfällt.

Das o.g. Skript hab ich mir von irgendwo zusammengeklaut… und habe leider keine Ahnung, wie ich das coden muss, um zu prüfen ob BEIDE (ggf. sogar alle - falls später welche dazukommen) Trunks online sind.

Das einzige was mir einfällt, ist zu greppen ob irgendwo „Error“, „No Authentication“ oder solche Fehlermeldungen auftauchen. Da ich aber nicht alle Fehlerbezeichnungen von Asterisk kenne, wäre das etwas unsicher.

Falls jemand kurz Zeit hat - Danke schonmal :wink:

Gruß,
ika

EDIT: alternativ kann ich natürlich auch auf den Status „130“ prüfen. Hier weiß ich aber auch nicht, wie ich checke ob zweimal „130“ in der Ausgabe vorkommt. Zumal sichergestellt sein müsste, dass nicht aus Versehen eine 130 gezählt wird, die etwa bei Username oder RegTime steht.

Mal aus der Hüfte auf die Schnelle und auch nicht wirklich schön:

$Trunk1OK=0
$Trunk2OK=0

/usr/sbin/asterisk -rx 'sip show registry' | grep sipconnect.sipgate.de | grep "Registered" && Trunk1OK=1
/usr/sbin/asterisk -rx 'sip show registry' | grep sipconnect.testserver1 | grep "Registered" && Trunk2OK=1

if [ $Trunk1OK -eq 1 ] && [ $Trunk2OK -eq 1 ]

Hi meson!

Danke, das funktioniert bestens!

Ich greppe jetzt ZUSÄTZLICH zum „Registered“ auch noch auf „130“ (weil es angeblich wohl auch eine Fehlermeldung „Not Registered“ gibt - unschön).
Wenn ich jetzt noch zusätzliche Trunks anlege, werden diese zwar zunächst mit dem Skript nicht gecheckt, aber es führt zu keinen weiteren Problemen.

Ist für mich also ausreichend schön!

DANKE nochmal!