Bash Script zum Sip Reload

Marian1982

Neuer User
Mitglied seit
22 Jul 2009
Beiträge
23
Punkte für Reaktionen
0
Punkte
1
Hallo ich habe hier ein Bashscript erstellt zum Neuregister wenn eine Siptrunkverbindung abgeleht wird...

leider klappt mein Cat-Bedingung nicht wenn in der txt Datei das Wort "Rejected" vorkommt soll dann der Reload sattfinden.

Hat hier jemand einen Hinweis für mich?

#!/bin/bash

while true; do

asterisk -rx "sip show registry" >/var/lib/asterisk/sip.txt;
sleep 30;
if [ "$(cat /var/lib/asterisk/sip.txt)" = "Rejected" ];
then
asterisk -rx "sip reload"; rm /var/lib/asterisk/sip.txt;

fi


done;
 
Moinsen


Nicht mit cat, da drinne steht der gesamte Text und nicht nur "Rejected"
Du musst was nehmen, was das rausfiltert, wie grep zum Beispiel.
Code:
grep -q "Rejected" sip.txt && echo "${?}: found" || echo "${?}: not found"
1. Das Kommando wird ausgeführt, dann liefert grep was zurück ( ${?} )...
2. Erfolgreich = ab && wird ausgeführt ( grep hat 0 geliefert )
3. Nicht gefunden = ab den || wird ausgeführt ( grep hat nicht 0 geliefert )
...das ist die Kurzform von: if then else
 
Zuletzt bearbeitet:
Super dank dir !!

das bau ich dann gleich ein!
 
Wenn ich mich nicht ganz doll irre, dann gibt es auch noch einen Schönheitsfehler in deinem Skript den du gewahr werden solltest.
Das einfache Gleichheitszeichen ( = ) ist ein Zuweisungsoperator, also variable=inhalt.
Wenn in einer bash/sh du eine Bedingung haben willst die auf Gleichheit checkt dann braucht es zwei davon, also:
if [ "$(cat /var/lib/asterisk/sip.txt)" == "Rejected" ];
( Funktioniert aber trotzdem nicht ;) )
In Asterisksyntax ( GotoIF(), ExecIf(), etc. ) ist ein einfaches Gleichheitszeichen auch ein Vergleichsoperator.
...also nicht durcheinander kommen.
 
Das einfache Gleichheitszeichen ( = ) ist ein Zuweisungsoperator, also variable=inhalt.
Gaaanz lange her - der Kontext entscheidet und der wird entweder vom "test"-Kommando (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html) oder von "[" (als Alias für ebendieses "test") bestimmt.

Ja, bei streng POSIX-konformer Shell kommt es sogar zum Fehler und in dessen Folge auch zum falschen Ergebnis (weil zwischen "stimmt nicht" und "Fehler" nicht unterschieden wird, solange kein "set -e" verwendet wurde):
Rich (BBCode):
peh@vidar:~> dash -c "test 'A' = 'B' && printf 'eq\n' || printf 'ne\n'"
ne
peh@vidar:~> dash -c "test 'A' = 'A' && printf 'eq\n' || printf 'ne\n'"
eq
peh@vidar:~> dash -c "test 'A' == 'B' && printf 'eq\n' || printf 'ne\n'"
dash: 1: test: A: unexpected operator
ne
peh@vidar:~> dash -c "test 'A' == 'A' && printf 'eq\n' || printf 'ne\n'"
dash: 1: test: A: unexpected operator
ne
peh@vidar:~>
Als "bashism" funktioniert das zwar auch weiterhin, aber man sollte es sich "abgewöhnen" und auch die "bash" kommt mit der korrekten POSIX-Syntax klar.
 
  • Wow
Reaktionen: koyaanisqatsi
Danke funktioniert einwandfrei mit Grep ich rufe in beiden Fällen ein extra script auf, welches den Reload macht und in eine Datei nen Zeitstempel fortlaufend schreibt.

Somit habe ich eine schöne Live Überwachung Sip Provider Verbindungen
 
@Marian1982 - Sehr schön, freut uns doch. Ich hab meinen Post nochmal bearbeitet, um deutlich(er) zu machen, warum das ohne :cool: Vergleichsoperator funktioniert.


@PeterPawn - OK, doch doll geirrt :) - Deswegen alleine schon sollten solche "Fingerübungen ob der Operatoren" Pflicht sein.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.