Shellscript für phpMyAdmin-Update - bitte checken

snake*sl

Registered User
Da alle Nase lang eine neue phpMyAdmin-Version erscheint, hab ich mir mal ein
kleines Shellscript geschrieben, um den Vorgang zu automatisieren.

Ich habe sowas noch nie gemacht und dachte mir, ich knalle meine normalen Shell-
Befehle in eine ausführbare Datei und brauche diese nur noch aufzurufen.

Mein Shellscript funktioniert, aber ist das so okay? Was würdet Ihr verbessern?
Code:
#!/bin/bash
ORDNER=/var/www/confixx/html
VERSION=2.11.1.2
USER=confixx
GROUP=confixx

wget --directory-prefix=$ORDNER http://mesh.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-$VERSION-all-languages.tar.bz2
cd $ORDNER
tar xjvf phpMyAdmin-$VERSION-all-languages.tar.bz2
mv -v $ORDNER/pma/config.inc.php $ORDNER/phpMyAdmin-$VERSION-all-languages/
rm -Rv $ORDNER/pma
mv -v $ORDNER/phpMyAdmin-$VERSION-all-languages $ORDNER/pma
chown -Rv $USER:$GROUP $ORDNER/pma
echo "Das phpMyAdmin-Update auf Version " $VERSION " wurde erfolgreich im Ordner " $ORDNER " durchgeführt!

Gruß,
snake*sl
 
Code:
cd $ORDNER
Ich würde nach so einer Aktion immer nochmal mit pwd gegenprüfen, ob ich wirklich in dem Ordner gelandet bin, oder ob das wechseln des Verzeichnisses fehlgeschlagen ist.
Es kann zwar in diesem Fall nicht all zu viel schiefgehen, weil du bei allen kritischen Commands absolute Pfade benutzt, aber ich würds trotzdem machen. Gibt mir immer ein besseres Gefühl. ;)
 
Danke für Deinen Tipp! Hab das jetzt so umgesetzt:

Code:
#!/bin/bash
ORDNER=/home/htdocs/confixx/html
VERSION=2.11.1.2
USER=confixx
GROUP=confixx

wget --directory-prefix=$ORDNER http://mesh.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-$VERSION-all-languages.tar.bz2
cd $ORDNER
if test pwd!="$ORDNER";
        then
                echo "Fehler beim Wechseln des Verzeichnis";
else
        tar xjvf phpMyAdmin-$VERSION-all-languages.tar.bz2
        mv -v $ORDNER/pma/config.inc.php $ORDNER/phpMyAdmin-$VERSION-all-languages/
        rm -Rv $ORDNER/pma
        mv -v $ORDNER/phpMyAdmin-$VERSION-all-languages $ORDNER/pma
        chown -Rv $USER:$GROUP $ORDNER/pma
        echo "Das phpMyAdmin-Update auf Version " $VERSION " wurde erfolgreich im Ordner " $ORDNER " durchgeführt!"
fi

Jetzt wäre es noch schön, wenn ich dem Script per Parameter die aktuelle phpMyAdmin Version mitteilen könnte. Geht das?
 
Ja, das geht, und ist auch garnicht so schwer. Angenommen das Skript heisst update, dann kannst du es so aufrufen:
Code:
update.sh variable1
Die Variable mit dem Inhalt "variable1" steht dir dann im Skript als
Code:
$1
zur verfügung.
Wenn man also folgendes Skript aufrugt
Code:
#!/bin/bash
echo "Hier ist die Variable: "$1
dann gibt der echo-Befehl
Code:
Hier ist die Variable: variable1
aus.
 
So, habe das Script nochmal aktualisiert. Keine Ahnung, ob das jetzt sauber gescriptet ist, funzt auf jeden Fall: :D
Code:
#!/bin/bash
ORDNER=/home/htdocs/confixx/html
USER=confixx
GROUP=confixx

if [ -z "$1" ]
then    echo "Bitte die Versionsnummer angeben. Beispiel: sh pma-update.sh 2.11.2";
else

        cd $ORDNER;

        MYORDNER=`pwd`;

        if [ $MYORDNER != $ORDNER ]
        then
                echo "Fehler beim Wechseln des Verzeichnis";
                pwd;

        else
                wget --directory-prefix=$ORDNER http://mesh.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-$1-all-languages.tar.bz2
                if [ -f "$ORDNER/phpMyAdmin-$1-all-languages.tar.bz2" ]
                then    tar xjvf phpMyAdmin-$1-all-languages.tar.bz2
                        mv -v $ORDNER/pma/config.inc.php $ORDNER/phpMyAdmin-$1-all-languages/
                        rm -Rv $ORDNER/pma
                        mv -v $ORDNER/phpMyAdmin-$1-all-languages $ORDNER/pma
                        chown -Rv $USER:$GROUP $ORDNER/pma
                        echo "Das phpMyAdmin-Update auf Version " $1 " wurde erfolgreich im Ordner " $ORDNER " durchgeführt!"
                else
                        echo "Fehler beim Download des Paketes";
                fi
        fi
fi
 
Wenn du die phpMyAdmin Version nun noch automatisch erkennen und prüfen lässt und paar Ausgaben für Syslog erzeugst, könnte man das Teil auch per Cron aufrufen. ;)
 
Wenn du die phpMyAdmin Version nun noch automatisch erkennen und prüfen lässt und paar Ausgaben für Syslog erzeugst, könnte man das Teil auch per Cron aufrufen. ;)

Wäre wirklich nicht schlecht. Aber wo kann man die aktuelle Version abrufen? Das Problem ist auch, dass das jetzt mein erstes Shellscript ist und das alle Neuland für mich ist.
 
Da mich die fertige Variante auch interessieren würde, hier gleich (auch wenn sonst unüblich ;)) die Fertige Variante zum auslesen der Version:

Code:
wget -q -O /tmp/phpMyAdmin_Update.html http://www.phpmyadmin.net/home_page/index.php && grep "Latest stable version:" /tmp/phpMyAdmin_Update.html | awk '{print $6}' | sed -e s/\<\\/span\>// && rm -f /tmp/phpMyAdmin_Update.html
 
Code:
wget -q -O /tmp/phpMyAdmin_Update.html http://www.phpmyadmin.net/home_page/index.php && grep "Latest stable version:" /tmp/phpMyAdmin_Update.html | awk '{print $6}' | sed -e s/\<\\/span\>// && rm -f /tmp/phpMyAdmin_Update.html
Hmm, jetzt muss ich das erstmal verstehen ...

Du ziehst Dir die Startseite von phpMyAdmin und speicherst sie als .html ab. Dann suchst Du nach der Zeile, die mit "Latest stable version:" beginnt. Nun wird der String zwischen Leerzeichen und </span> extrahiert und ausgegeben.

Anschließend wird die .html gelöscht.

Jetzt meine Frage: Ist die Versionsnummer jetzt über $6 verfügbar oder sollte ich den ganzen Befehl in eine Variable schicken?
 
Okay, gerade mal in awk eingelesen ... Du holst Dir also den 6. Block aus der awk-Ausgabe.

Gibt's da auch eine Möglichkeit die Ausgabe in einer Variable zu speichern? Hab da noch nichts gefunden.
 
Das ganze in eine Variable.
Wenn du es auf der Console ausprobierst, wirst du feststellen, dass nur die reine Versionsnummer zurückkommt. :)

Mit awk $6 hol ich mir aus der kompletten Zeile den Teil (Teile durch Leerzeichen getrennt) in dem die Versionsnummer steht.
Dieser hat aber leider noch ein lästiges "</span>" hinten dran.
Dies wird dann durch den sed Befehl gelöscht und übrig bleibt die reine Versionsnummer.
Zum Schluss wird die Index Page wieder gelöscht um unnötigen Datenmüll auf der Platte zu vermeiden.
 
Hab das natürlich auch getestet und die Versionsnummer gesehen. Aber ich muss die ja irgendwie weiterverarbeiten können, sprich in eine Variable schreiben. Oder verstehe ich da was falsch?
 
Habe gerade mal das hier getestet, geht aber nicht :confused:
Code:
#!/bin/bash
wget -q -O /tmp/phpMyAdmin_Update.html http://www.phpmyadmin.net/home_page/index.php && grep "Latest stable version:" /tmp/phpMyAdmin_Update.html | set VERSION = `awk '{print $6}' | sed -e s/\<\\/span\>//` && rm -f /tmp/phpMyAdmin_Update.html

echo $VERSION;
 
Code:
#!/bin/bash
version=$(wget -q -O /tmp/phpMyAdmin_Update.html http://www.phpmyadmin.net/home_page/index.php && grep "Latest stable version:" /tmp/phpMyAdmin_Update.html | awk '{print $6}' | sed -e s/\<\\/span\>// && rm -f /tmp/phpMyAdmin_Update.html )
echo $version
 
:rolleyes: Natürlich hab ich das vorhin auch getestet, aber es funktionierte nicht. Wahrscheinlich hatte ich einen Tippfehler oder so ...

Hier nochmal das komplette Script:
Code:
#!/bin/bash
ORDNER=/srv/www/confixx/html  #Ordner in dem phpMyAdmin laufen soll
USER=confixx                                #Benutzer
GROUP=confixx                              #Gruppe

#Aktuelle phpMyAdmin-Version ermitteln
VERSION=$(wget -q -O /tmp/phpMyAdmin_Update.html http://www.phpmyadmin.net/home_page/index.php && grep "Latest stable version:" /tmp/phpMyAdmin_Update.html | awk '{print $6}' | sed -e s/\<\\/span\>// && rm -f /tmp/phpMyAdmin_Update.html )

if [ -z "$VERSION" ]
then    echo "Es konnte keine Version ermittelt werden. Bitte später erneut versuchen!";
else

        cd $ORDNER;

        MYORDNER=`pwd`;

        if [ $MYORDNER != $ORDNER ]
        then
                echo "Fehler beim Wechseln des Verzeichnis";
                pwd;

        else
                wget --directory-prefix=$ORDNER http://mesh.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-$VERSION-all-languages.tar.bz2
                if [ -f "$ORDNER/phpMyAdmin-$VERSION-all-languages.tar.bz2" ]
                then    tar xjvf phpMyAdmin-$VERSION-all-languages.tar.bz2
                        mv -v $ORDNER/phpMyAdmin/config.inc.php $ORDNER/phpMyAdmin-$VERSION-all-languages/
                        rm -Rv $ORDNER/phpMyAdmin
                        mv -v $ORDNER/phpMyAdmin-$VERSION-all-languages $ORDNER/phpMyAdmin
                        chown -Rv $USER:$GROUP $ORDNER/phpMyAdmin
                        echo "Das phpMyAdmin-Update auf Version " $VERSION " wurde erfolgreich im Ordner " $ORDNER " durchgeführt!"
                else
                        echo "Fehler beim Download des Paketes";
                fi
        fi
fi

Hab das ganze auch nochmal in meinem Blog gepostet:
Rootserver - Blog

Vielen Dank für Deine Hilfe, Firewire!
 
Wenn du´s perfekt machen willst, schaust du dir noch das kleine Tool "logger" an. ;)
Im übrigen würde ich die Versionsnummer des installierten phpMyAdmin speichern um sie bei jedem Scriptaufruf zu vergleichen.
Erst dann lohnt sich nämlich der Einsatz des Scriptes via Cron. :)
 
Cron spar ich mir, da ich eh den Feed von phpMyAdmin bestellt habe und sofort sehe, wenn ein Update kommt.

Logger habe ich mir gerade angesehen. Ist ja relativ easy zu handeln, jedoch müsste ich dann wesentlich mehr Kontrollen einbauen. Ich lass das jetzt erstmal so wie es ist.
 
Back
Top