PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen in Bash weiterverarbeiten



Das_Gnu
29-10-2002, 15:50
Ich bin gerade dabei, eine PHP-basierte Support-Oberfläche zu erstellen, die aus CVS die jeweils aktuellste Download-Version eines Programmes holt.
Dazu gebe ich auf Console zum Beispiel die Befehle

cd /web/httpd/htdocs/support/download
cvs -d /usr/cvs export -D 2002-10-26 Modulname
cd /web/httpd/htdocs/support/download/Modulname
tar cfz Modulname.tgz * ein.
"2002-10-29" ist das aktuelle Tagesdatum, damit die neueste Version geladen wird,
"Modulname" ist der Name des Projektes.

Die exec() -, system() -, passthru - Funktionen funktionieren in diesem Fall (zumindest auf unserem Server) nicht mit dem cvs-Kommando, da sie nicht in die Unterverzeichnisse abtauchen - habe alles mögliche probiert.
Dagegen funktioniert zum Beispiel der Aufruf einer BASH-Datei mit obengenanntem Inhalt:

exec("export.sh") hervorragend.
Jedoch sind "Modulname" und Datum (Schalter -D) Variablen, die der Besucher wählen soll. So ist statt
-D <datum> zum Beispiel auch der Schalter
-r <versionsnummer> möglich.

Das PHP ist kein Problem für mich, aber BASH.

Wie kann ich nun zum Beispiel die aus PHP übergebenen Parameter in dem BASH-Script auswerten, wenn ich die Variablen aus dem PHP-Script etwa in der Form übergebe
exec("export.sh --date=$date --modul=$modulname")?
Leider habe ich noch nie ein Bash-Script selber konfiguriert oder geschrieben.

anda_skoa
29-10-2002, 15:58
Übergibt die beiden Parameter einfach direkt, d.h ohne --option
Im Bashcript sind die Parameter dann $1 (der erste Parameter) und $2 (der zweite Parameter)



#!/bin/bash
echo Datum: $1
echo Modul: $2


Ciao,
_

fork
29-10-2002, 21:50
Es soll sogar irgendwie ein Modul GetOpts für Shellscripte vorhanden sein, finde den Thread aber gerade nicht. Die von anda_skoa erwähnte Methode geht natürlich, aber Standardkonforme Optionen sehen schöner aus und sind dazu noch selbst erklärend. Hier mein Codeschnipsel zu Long Options.

Vorsicht: "="-Zeichen im Optionswert produzieren Fehler.

#!/bin/bash
# alle Argumente überprüfen
for PAR in $@ ; do
# Prüfen ob die ersten beiden Zeichen Minuszeichen sind
if [ $(echo $PAR| cut -c1-2) == "--" ]
then
# Den Namen der Long Option extrahieren
LONG_OPT=$(echo $PAR | cut -c3- | cut -d= -f1)
# Den Inhalt des Optionswertes extrahieren
OPT_VAL=$(echo $PAR | cut -d= -f2)
# Prüfen ob die entsprechende Option gesetzt wurde und interne Variable versorgen
[ $LONG_OPT == "date" ] && DATE="$OPT_VAL"
[ $LONG_OPT == "modul" ] && MODUL="$OPT_VAL"
fi
done

Das_Gnu
30-10-2002, 08:58
Vielen Dank!!!

Ich werde beide Varianten probieren.
Sobald ich alles fertig habe, setze ich es hier rein.

Beste Grüße
Das Gnu