Das Skript ist kommentiert. Sollte doch was unklar sein, einfach fragen.....
smsalarm:
Code:
#!/bin/bash
#  Skript zur SMS-Alarmierung über SMS77
#  Daniel Müllegger 2006
#  Dieses Skript darf frei verwendet oder verändert werden.
#  Für Funktion oder Fehlerfreiheit kann ich keinerlei Garantien übernehmen
#  Viel Spaß beim alarmieren!
#  Dieses Skript benötigt CURL


# USER:		Username bei sms77.de:
# PASS:	 	Passwort bei sms77.de:
# USERSFILE: 	Diese Datei enthält die zu alarmierenden Tel.-Nummern, eine je Zeile:
# ALARMTEXT: 	Der Text der in der SMS enthalten ist:
# TYPE:		Typ der SMS. Möglich: basicplus, quality, standard, festnetz, flash
# FROM:		Absender der SMS

USER=xxx; 	PASS=xxxxxxxx

ALARMTEXT="FFW XYZ SMS Benachrichtigung. Ein Alarm ist eingegangen. Alle Angaben ohne Gewähr "`date +"%X %d.%m.%Y"`
TYPE=quality 
FROM=FFWXyz	

# STATUSUSER:	An diese Nummer wird als letztes eine SMS-verschickt mit Text, Startzeit, Datum, Endzeit der Alarmierung, 
#		Anzahl erfolgreicher SMS/Anzahl User/Anzahl der Versuche insgesamt und Kontostand vor Versand der Statussms
STATUSUSER=01711234567

# USERSFILE:	In dieser Datei stehen die zu alarmierenden Handynummern je eine am Anfang einer Zeile.
#			Dahinter durch ein Leerzeichen getrennt können Namen oder Kommentar stehen.
# LOGFILE:	Logdatei
# LOCKFILE:	Wenn diese Datei existiert, wird das Skript nicht ausgführt und nur eine Logmeldung ausgeben.
#			Damit werden Mehrfachalarmierungen (z.B. durch mehrere Schleifen) vermieden.
# URL:		An diese URL werden die Parameter per http-get-Befehl mittels curl übergeben.

USERSFILE=$0.users
LOGFILE=$0.log
LOCKFILE=$0.lock
URL="http://www.sms77.net/gateway/"

#Für Logfile
WHAT="[sms]  "

# Wenn DISABLESMS=" -d debug=1" gesetzt ist, werden keine SMS verschickt,
# sondern nur am Server angefragt, ob die Syntax i. O. ist

DISABLESMS=" -d debug=1"
if [ "$DISABLESMS" = " -d debug=1"  ] ;  then WHAT=[nosms]; fi
if [ "$1" = "alarm" ] ;	then WHAT=[alarm]; 	DISABLESMS="" ; fi
if [ "$1" = "debug" ] ;	then WHAT=[debug]; 	DISABLESMS=" -d debug=1" ; fi
if [ -e $0.probe ] ;  	then WHAT=[probe]; 	DISABLESMS=" -d debug=1" ; fi

if [ ! -e $LOCKFILE ]
then    {
	touch $LOCKFILE

	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT ***************** Start der SMS Alarmierung ********************" ; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT *** Übermittelte Nachricht: $ALARMTEXT ***" ;  if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 

	# Zu alarmierende Tel.-Nummern einlesen
	USERSTOALARM=`cat $USERSFILE |awk '{ print $1}'`
	USERSNOTALARMED=""
	NOOFUSERS=0
	NOOFALARMEDUSERS=0
	NOOFTRYS=0
	for TRY in `seq 5`
	do
		USERSNOTALARMED=""
		for NUMBER in $USERSTOALARM
		do
			if [ $TRY = 1 ]; then NOOFUSERS=$[$NOOFUSERS + 1] ; fi
			TEXT=$ALARMTEXT
			DATA="-d u=$USER -d p=$PASS -d to=$NUMBER -d from=$FROM -d text=${TEXT//" "/%20} -d type=$TYPE$DISABLESMS"
			RESULT=""
			RESULT=$(curl -m 5 --silent --get $DATA --url $URL);
			if [ "$RESULT" != "100" ]; 
				then USERSNOTALARMED="$USERSNOTALARMED $NUMBER"; 
				else NOOFALARMEDUSERS=$[$NOOFALARMEDUSERS +1];
			fi
			WRITETOLOG="`date +"%Y%m%d %X"` $WHAT $TRY $RESULT $NUMBER $FROM $TYPE"; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
			NOOFTRYS=$[$NOOFTRYS + 1]
		done
		USERSTOALARM=$USERSNOTALARMED
		if [ "$USERSTOALARM" != "" ]; then sleep 3; fi
	done
	
	ACCOUNTDATA="-d u=$USER -d p=$PASS"
	GUTHABEN=-na-
	GUTHABEN=$(curl -m 5 --silent --get $ACCOUNTDATA --url $URL/balance.php);
	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT Konto: $USER Restguthaben: $GUTHABEN"; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 

	TO=$STATUSUSER
	TRY=X
	TEXT="$ALARMTEXT `date +"%X"` $NOOFALARMEDUSERS/$NOOFUSERS/$NOOFTRYS Konto: $USER $GUTHABEN EUR"
	DATA="-d u=$USER -d p=$PASS -d to=$TO -d from=$FROM -d text=${TEXT//" "/%20} -d type=$TYPE$DISABLESMS"
	RESULT=""
	RESULT=$(curl -m 5 --silent --get $DATA --url $URL);
	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT $TRY $RESULT $TO $FROM $TYPE ---$TEXT---"; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 

	NOWAIT=""
	if [ "$2" = "nosleep" ] ; then NOWAIT="ist deaktiviert"  ; fi
	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT *** 60 Sekunden warten $NOWAIT ***";  if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
	if [ "$2" != "nosleep" ] ; then sleep 60 ; fi

        rm $LOCKFILE > /dev/null 2>&1
	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT ***************** Ende der SMS Alarmierung  ********************"; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 

        };
else 	{
	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT $0 abgebrochen ($LOCKFILE existiert)"; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
	};
fi
Beim Start von smsalarm wird überprüft ob die Datei smsalarm.lock existiert. Wenn nicht wird sie angelegt und das Skript ausgeführt.
Wenn nicht wird nur eine Log-Meldung geschrieben.
Nachdem die Alarmierung durch ist wird noch 60 Sekunden gewartet und dann smsalarm.lock gelöscht. Auf diese Weise werden Mehrfachalarmierungen (z.B. durch AU) verhindert.
Existiert die Datei /home/smsalarm/smsalarm.probe wird das Skript wie beim Aufruf smsalarm debug abgearbeitet und Logmeldungen geschrieben, aber keine SMS versandt.
So können z.B. mit cronjobs einfach Probealarme ausgeblendet werden.

Noch eine Anmerkung zu den Dateinamen:
Die lock, log, users und probe Dateien sind abhängig von Name und Pfad des eigentlichen Alarmskriptes. Benennt man smsalarm um in kleineschleife, dann werden die Dateien
kleineschleife.log, kleineschleife.lock, kleineschleife.users und kleineschleife.probe heißen.
Auf diese Weise kann man einfach Verschiedene Schleifen realisieren.
Ich hoffe ich hab verständlich genug geschrieben. Viel Spaß beim Alarmieren.

duese

P.S. Für Richtigkeit und Fehlerfreiheit der Skripten und Programme kann ich leider keine Garantie übernehmen. Aber den ersten erfolgreichen Einsatz hatte das System heute beim Probealarm