zwei scripte zusammen legen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
wk1
Beiträge: 12
Registriert: 16.12.2014 11:40:05
Lizenz eigener Beiträge: MIT Lizenz

zwei scripte zusammen legen

Beitrag von wk1 » 20.01.2015 09:57:04

Hallo@all,

ich habe mir zwei Scripte für die bash geschrieben, die mir in diversen .htaccess-Dateien die IP-Adressen von den zutrittsberechtigten Usern ändern. Nun möchte ich die zwei Scripte zu einem Script verschmelzen/verbinden, jedoch komme ich nicht weiter und bräuchte ein wenig Hilfe.

Zum besseren Verständnis Packe ich die zwei Scripte mal hier rein.

ipupdaterv4.sh

Code: Alles auswählen

#!/bin/bash

WORKER_DIR="/tmp/ipupdater"
LASTIPFILE=$WORKER_DIR/lastip
LOGFILE=/var/log/ip.log
LASTIP=`/bin/cat $LASTIPFILE`
NEWIP=`/bin/cat /home/ipupdater/lastip`

TIME_START=`date +%s`

if [ ! -e $WORKER_DIR ]; then
    mkdir $WORKER_DIR; fi

if [ ! -e $LASTIPFILE ]; then
    echo "NoIpSavedYet" > $LASTIPFILE; fi

if [ $NEWIP != $LASTIP ]; then

    cp /var/www/vhost1/.htaccess $WORKER_DIR/tmp1

    sed "s/$LASTIP/$NEWIP/g" $WORKER_DIR/tmp1 > $WORKER_DIR/tmp2

    mv $WORKER_DIR/tmp2 /var/www/vhost1/.htaccess

    chown www-data:www-data /var/www/vhost1/.htaccess

    rm -f $WORKER_DIR/tmp1
    rm -f $WORKER_DIR/tmp2

    sleep 1
	
	cp /var/www/vhost2/.htaccess $WORKER_DIR/tmp1

    sed "s/$LASTIP/$NEWIP/g" $WORKER_DIR/tmp1 > $WORKER_DIR/tmp2

    mv $WORKER_DIR/tmp2 /var/www/vhost2/.htaccess

    chown www-data:www-data /var/www/vhost2/.htaccess

    rm -f $WORKER_DIR/tmp1
    rm -f $WORKER_DIR/tmp2
	
    echo `/bin/date +"%d.%m.%Y - %H:%M:%S"` IP: $NEWIP >> $LOGFILE

    echo $NEWIP > $LASTIPFILE

fi

#echo "NEWIP: $NEWIP"
#echo "LASTIP: $LASTIP"

TIME_END=`date +%s`

logger -p local1.info -t ipupdaterv4.sh "ipupdaterv4.sh executed in $((TIME_END - $TIME_START)) seconds."

exit 0
und ipupdaterv6.sh

Code: Alles auswählen

#!/bin/bash

WORKER_DIR="/tmp/ipupdater"
LASTIPFILEv6=$WORKER_DIR/lastipv6
LOGFILEv6=/var/log/ipv6.log
LASTIPv6=`/bin/cat $LASTIPFILEv6`
NEWIPv6=`/bin/cat /home/ipupdater/lastipv6`

TIME_START=`date +%s`

if [ ! -e $WORKER_DIR ]; then
    mkdir $WORKER_DIR; fi

if [ ! -e $LASTIPFILE ]; then
    echo "NoIpSavedYet" > $LASTIPFILEv6; fi

if [ $NEWIPv6 != $LASTIPv6 ]; then

    cp /var/www/vhost1/.htaccess $WORKER_DIR/tmp1

    sed "s/$LASTIPv6/$NEWIPv6/g" $WORKER_DIR/tmp1 > $WORKER_DIR/tmp2

    mv $WORKER_DIR/tmp2 /var/www/vhost1/.htaccess

    chown www-data:www-data /var/www/vhost1/.htaccess

    rm -f $WORKER_DIR/tmp1
    rm -f $WORKER_DIR/tmp2

    sleep 1
	
	cp /var/www/vhost2/.htaccess $WORKER_DIR/tmp1

    sed "s/$LASTIPv6/$NEWIPv6/g" $WORKER_DIR/tmp1 > $WORKER_DIR/tmp2

    mv $WORKER_DIR/tmp2 /var/www/vhost2/.htaccess

    chown www-data:www-data /var/www/vhost2/.htaccess

    rm -f $WORKER_DIR/tmp1
    rm -f $WORKER_DIR/tmp2
	
    echo `/bin/date +"%d.%m.%Y - %H:%M:%S"` IP: $NEWIPv6 >> $LOGFILEv6

    echo $NEWIPv6 > $LASTIPFILEv6

fi

#echo "NEWIPv6: $NEWIPv6"
#echo "LASTIPv6: $LASTIPv6"

TIME_END=`date +%s`

logger -p local1.info -t ipupdaterv6.sh "ipupdaterv6.sh executed in $((TIME_END - $TIME_START)) seconds."

exit 0
Jetzt habe ich mir überlegt, dass ich mit einer OR und IF Kombination das Ganze zusammenlegen kann, nur weiß ich nicht, wie ich das zusammenbauen soll. Ist halt mein erstes Script ;).

Code: Alles auswählen

if [ $NEWIP != $LASTIP ] || [ $NEWIPv6 != $LASTIPv6 ]; then
Das Problem bei meinen Überlegungen ist, das sich einmal die IPv4-Adresse ändert und einmal die IPv6-Adresse oder sogar beide gleichzeitig.

Ich sage schon einmal Danke für alle Anregungen oder Vorschläge und bitte gleichzeitig um Nachsicht, da ich Anfänger bin.

LG Sven

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: zwei scripte zusammen legen

Beitrag von rendegast » 20.01.2015 17:09:15

Zuerst mal würde ich die Variablennamen harmonisieren, im ipv6-Skript
LASTIPFILEv6 -> LASTIPFILE
usw.
damit der funktionale Teil schonmal gleich ist (für die logger-Nachricht später eine Lösung).
dann kann der funktionale Teil in eine Funktion, mit mehrfachem Aufruf:

Code: Alles auswählen

#WORKER_DIR="/tmp/ipupdater"
WORKER_DIR="$(mktemp -d /tmp/blafoo.XXXXXX)"

function() {
...
}

LASTIPFILE=$WORKER_DIR/lastip
LOGFILE=/var/log/ip.log
LASTIP=`/bin/cat $LASTIPFILE`
NEWIP=`/bin/cat /home/ipupdater/lastip`
function
rm $WORKER_DIR/*

LASTIPFILE=$WORKER_DIR/lastipv6
LOGFILE=/var/log/ipv6.log
LASTIP=`/bin/cat $LASTIPFILE`
NEWIP=`/bin/cat /home/ipupdater/lastipv6`
function

rm -rf $WORKER_DIR

Und/Oder, vielleicht einen Auslöser-Wächter Debianincron auf
/home/ipupdater/lastip[v6] ansetzen,
->
/home/ipupdater/last/ipv4
/home/ipupdater/last/ipv6
incrontab in der Art:

Code: Alles auswählen

/home/ipupdater/last IN_MODIFY /script $#
Wobei /script je nach Argument ipv4 oder ipv6 behandelt.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

wk1
Beiträge: 12
Registriert: 16.12.2014 11:40:05
Lizenz eigener Beiträge: MIT Lizenz

Re: zwei scripte zusammen legen

Beitrag von wk1 » 20.01.2015 22:49:30

Hallo rendegast,

danke für Deine Antwort und Unterstützung.

So wie Du es mit dem incron Beschreibst, so habe ich es mir auch schon überlegt, nur sehe ich darin ein Problem. Das kommt immer dann zum tragen, wenn sich die IPv4 und IPv6 zur gleichen zeit ändert, dann versuchen zwei Scripte zur gleichen zeit eine Datei zu bearbeiten.

Zu der Funktion. Die erschließt sich mir nicht so ganz bzw. ich hab keine Ahnung, wie ich das mit meiner if ; then Anweisung kombinieren soll, damit mir das Script entweder die Anweisungen nacheinander oder halt nur eine Anweisung abarbeitet ... je nachdem was zutrifft.

LG Sven

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: zwei scripte zusammen legen

Beitrag von rendegast » 20.01.2015 23:48:36

... nur sehe ich darin ein Problem.
... wenn sich die IPv4 und IPv6 zur gleichen zeit ändert, dann versuchen zwei Scripte zur gleichen zeit eine Datei zu bearbeiten.
Gut erkannt.

Meine Vorschläge sind Vorschläge, Kombination möglich,
und die letztendliche Realisierung, was am praktikabelsten und stabilsten das gewünschte Ergebnis bringt obliegt Dir.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

wk1
Beiträge: 12
Registriert: 16.12.2014 11:40:05
Lizenz eigener Beiträge: MIT Lizenz

Re: zwei scripte zusammen legen

Beitrag von wk1 » 20.01.2015 23:58:34

was hältst Du von so einer Lösung, kombiniert mit incron?

Code: Alles auswählen

if [ $NEWIPv4 != $LASTIPv4 ]
    then kommandos1
  elif [ $NEWIPv6 != $LASTIPv6 ]
    then kommandos2
  else
fi
oder habe ich die elif else Sache falsch verstanden?

LG Sven

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: zwei scripte zusammen legen

Beitrag von rendegast » 21.01.2015 00:22:18

Damit würdest Du den von Dir aufgeworfenen Fall ausschließen,
denn dann würde nur kommandos1 aber nicht mehr kommandos2 ausgeführt.
Nach dem 'else' müßte noch etwas kommen.
Braucht Verfeinerung.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

medias
Beiträge: 90
Registriert: 18.05.2014 11:21:43

Re: zwei scripte zusammen legen

Beitrag von medias » 21.01.2015 22:30:12

Sagt mal, cat ist das Programm zum Zusammenlegen mehrerer Dateien. Man kann es auch anders machen, aber cat ist wohl erste Wahl wenn es um kleine Dateien geht, ansonsten gab oder gibt es Probleme mit dem Buffer. Das steht irgendwo auf servervault.com.

Ich sitze zur Zeit an einer plain-text-Datei die ist –43 MB (!) gross. Hin und wieder füge ich dieser grossen Datei eine kleinere an. Also cat kleine-Datei grosse-Datei > Ergebnissdatei. Sollte ich das mit cat machen oder womit?

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: zwei scripte zusammen legen

Beitrag von rendegast » 21.01.2015 22:43:20

medias hat geschrieben: Also cat kleine-Datei grosse-Datei > Ergebnissdatei.
ginge auch

Code: Alles auswählen

cat kleine >> grosse
die ist –43 MB (!) gross
sieh Dir logrotate näher an.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten