ubuntuusers.de

Bash script dateinamen auslesen und in Var speichern

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

SiggiAZE

Anmeldungsdatum:
3. Januar 2008

Beiträge: Zähle...

Hallo...

also ich habe folgendes Problem!

Ich möchte mit einem Script einen svn ordner nach dateinamen durchsuchen und die aktuellste datei in einer Variablen speichern! Also den Dateinamen. Diesen Dateinamen widerum muss ich dann in eine config file an Stelle xy einfügen, damit ein anderes script widerum damit arbeiten kann!

Wenn das alles fertig ist, dann hab ich noch ein Problem! Wieder mit dateinamen und mysql. Ich möchte dann Updates in die SQl DB installieren lassen! dazu muss ich die dateinamen auseinander klamüsern! also Version_DBName_tail.sql Wobei die version immer 4stellig ist! Noch! DBName kann unterschiedlich sein und tail ist fast immer unterschiedlich!
Ich müsste dann die version mit ner vorher eingelesenen version vergleichen, damit ich nicht die falschen updates isntalliere! Ich hab schon mehrfach versucht über ein script sql dateien in die db einzufügen aber nix war erfolgreich! Bitte dringend um Hilfe! Danke

Der_Gestreifte

Avatar von Der_Gestreifte

Anmeldungsdatum:
21. Juni 2007

Beiträge: 1261

Wohnort: Nürnberg

Ich möchte mit einem Script einen svn ordner nach dateinamen durchsuchen und die aktuellste datei in einer Variablen speichern!

VAR=$(/bin/ls -tr | tail -1)

wäre die primitivste Möglilchkeit.

Diesen Dateinamen widerum muss ich dann in eine config file an Stelle xy einfügen, damit ein anderes script widerum damit arbeiten kann!

Was ist die Stelle XY (bspw. ein Zeilenanfang, Zeile/Spalte, die Nähe zu einem bekannten String etc.)?

dazu muss ich die dateinamen auseinander klamüsern!

Hups.
Und SQL.
Spätestens an dieser Stelle willst Du eine andere Sprache als "bash" nehmen 😉

Ich hab schon mehrfach versucht über ein script sql dateien in die db einzufügen aber nix war erfolgreich!

Sag ich doch 😬

SiggiAZE

(Themenstarter)

Anmeldungsdatum:
3. Januar 2008

Beiträge: 22

An Stelle xy einfügen könnte man mit Zeilennummer und Spaltennummer machen! Allerdings müsste dazu vorher der alte Name gelöscht werden! Also sprich die alte Varible! Das grösste Problem stell sich mir allerdings mit SQL dar! Was muss ich da widerum tun, damit es funktioniert? Mit php gehts ja aber kann ich von der Shell aus eine php datei ausführbarer weise aufrufen? Bitte helft mir da mal! Es geht um einen Server und ich hab nicht wirklich die Zeit das ständig alleine zu machen! Vielen Dank

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

Wenn du PHP kannst...dann mach es lieber in PHP.

Ein php script ruft man folgendermaßen auf:

php script.php


Das hätte man aber auch selbst rausfinden können.

SiggiAZE

(Themenstarter)

Anmeldungsdatum:
3. Januar 2008

Beiträge: 22

naja php sollte mein letztes Mittel sein! Ich bin mir sicher, dass es mit php geht, denn mit phpmyadmin kann man schliesslich auch sql dateien auf datenbanken updaten! Ich wollte eigentlich das ganze mit bash machen, da ich mir mit php auch noch nich so sicher bin! Ein wenig angeschaut ja! Wenn es eine andere Möglichkeit geben sollte als php dann würde ich erst diese versuchen! Vielen Dank aber für die Starthilfe! Das bringt mich erstmal weiter! Werde es nachher gleich versuchen.

SiggiAZE

(Themenstarter)

Anmeldungsdatum:
3. Januar 2008

Beiträge: 22

So...ich hab mich nun mal dran gesetzt und versucht, was du mir vorgeschlagen hast! VAR=$(/bin/ls -tr | tail -1) tut nicht das was ich wollte! Es wird ganz im Gegenteil gar nichts in der Variable gespeichert! Auch nicht wenn ich einen Teil des Dateinamens angebe! Überhaupt scheint diese Kombination von ls und tail mir nicht die Richtige zu sein! Ich brauche etwas, dass folgednes Szenario bearbeitet!

Online SVN Ordner mit 5 Dateien!
Dateinamen sind folgendermaßen aufgebaut!
Program-rVersion-rest.patch <\–– .patch ist Dateiendung

Wobei bei den Dateinamen sich hier nr die Versionen uterscheiden! Der Rest ist immer gleich!

Mit ls -tr kann ich die Dateien nach Änderungsdatum, das erste voran orden lassen! Feine Sache! Nun noch den Dateinamen in einer Variablen aufnehmen! Dann mlchte ich den Inhalt dieser Variable in eine config Datei an Position Zeile x und Spalte y schreiben! Zuvor müsste an genau dieser Position der alte patch dateiname entfernt werden! Zeichenkette hat immer die gleiche Länge!

Dann habe ich noch immer das Problem mit den SQl Dateien! Diese sind wie folgt aufgebaut!

Version_Datenbankname_Tabellenname.sql
1234_DB3_table4.sql

Die Version ist immer 4-stellig, der datenbankname reichen mir die ersten 4 Zeichen für die if abfrage, der rest ist uninteressant!

Diese Variablen müssen global sein oder ich muss sie wieder, dann aber den kompletten dateinamen in eine weitere config oder tmp datei schreiben, damit ich sie weiter bearbeiten kann. Denn diese sql Dateien sind updates, die in die verschiedenen Datenbanken einfließen müssen!

Wenn mir nun jemand dahin gehend weiter helfen kann, wäre ich sehr dankbar! Ich benutze Linux seit etwa 4 Monaten, bin daher mit den Befehlen noch nicht sehr vertraut! Und in Sammelsurien findet man leider auch nicht alle bash Befehle!

Vielen Dank

SiggiAZE

(Themenstarter)

Anmeldungsdatum:
3. Januar 2008

Beiträge: 22

So ich habe jetzt das auslesen Problem folgendermaßen gelöst!

VAR=$(/bin/ls -tr | grep --max-count=1 Dateianfang)

damit sortiert man sich die Dateien nach Änderungsdatum und grep schaut nach der ersten Übereinstimmung und bricht ab! Somit hat man die neueste Dateiversion in VAR gespeichert!

Nun zum nächsten! Ich kann aus der Config, in die ich die neue Dateiversion eintragen möchte, die alte Version mit ${SD2Patch} auslesen. Kann ich nun dieser Variable ud damit verbunden auch in der Config Datei den Wert ändern indem ich ${SD2Patch} einfach VAR zuordne? mit ${SD2Patch}=$VAR gehts nicht! Auch ${SD2Patch}='$VAR' blieb erfolglos! Oder ist es nicht möglich dieses zu ändern? Die config Datei hat Schreibrechte! Daran solls also nicht hapern!

SiggiAZE

(Themenstarter)

Anmeldungsdatum:
3. Januar 2008

Beiträge: 22

so! Nu hab ichs endlich geschafft! Her mal der Code Schnipsel

#!/bin/bash
. config

cd ${MangosDir}/src/bindings/ScriptDev2/patches/
scriptdev2ver=$(/bin/ls -tr | grep --max-count=1 MaNGOS)
echo "Version of ScriptDev2 Patch in config file is ${SD2Patch}"
echo ""
sleep 1
echo "newest Version of ScriptDev2 Patch is $scriptdev2ver"
echo ""
sleep 1
cd ${BuilderDir}
if [ ${SD2Patch} = $scriptdev2ver ];
then
echo "everything is fine!"
else
echo "write $scriptdev2ver as Patch in config file"
sed s/${SD2Patch}/$scriptdev2ver/g config > config_tmp
mv config_tmp config
fi

Antworten |