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;
 

koyaanisqatsi

IPPF-Urgestein
Mitglied seit
24 Jan 2013
Beiträge
13,338
Punkte für Reaktionen
457
Punkte
83
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:

Marian1982

Neuer User
Mitglied seit
22 Jul 2009
Beiträge
23
Punkte für Reaktionen
0
Punkte
1
Super dank dir !!

das bau ich dann gleich ein!
 

koyaanisqatsi

IPPF-Urgestein
Mitglied seit
24 Jan 2013
Beiträge
13,338
Punkte für Reaktionen
457
Punkte
83
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.
 

PeterPawn

IPPF-Urgestein
Mitglied seit
10 Mai 2006
Beiträge
13,764
Punkte für Reaktionen
1,260
Punkte
113
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):
[email protected]:~> dash -c "test 'A' = 'B' && printf 'eq\n' || printf 'ne\n'"
ne
[email protected]:~> dash -c "test 'A' = 'A' && printf 'eq\n' || printf 'ne\n'"
eq
[email protected]:~> dash -c "test 'A' == 'B' && printf 'eq\n' || printf 'ne\n'"
dash: 1: test: A: unexpected operator
ne
[email protected]:~> dash -c "test 'A' == 'A' && printf 'eq\n' || printf 'ne\n'"
dash: 1: test: A: unexpected operator
ne
[email protected]:~>
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

Marian1982

Neuer User
Mitglied seit
22 Jul 2009
Beiträge
23
Punkte für Reaktionen
0
Punkte
1
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
 

koyaanisqatsi

IPPF-Urgestein
Mitglied seit
24 Jan 2013
Beiträge
13,338
Punkte für Reaktionen
457
Punkte
83
@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:

Erhalten Sie 3CX für 1 Jahr kostenlos!

Gehostet, in Ihrer privaten Cloud oder on-Premise! Ganz ohne Haken. Geben Sie Ihren Namen und Ihre E-Mail an und los geht´s:

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.
oder via