XML-Tags per ShellScript auslesen und damit weiterarbeiten

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • XML-Tags per ShellScript auslesen und damit weiterarbeiten

    Hallo zusammen,

    ich bin auf der Suche nach einer möglichst simplen Möglichkeit XML-Tags aus einem XML-File mittels eines ShellScript auszulesen. Genauer gesagt möchte ich genau ein ShellScript haben, das quasi als Konfigurationsdatei fungiert und mehrere XML-Files, die unter den jeweiligen Tags den eigentlichen Inhalt meines Scripts beinhalten. Der Gedanke dahinter ist der, das ich ein relativ großes Projekt realisieren muß und es wäre aus meiner Sicht einfach übersichtlicher es so zu machen. Ich habe also im Prinzip ein XML-File haben das irgendwie so aussehen könnte:


    Source Code

    1. ...
    2. <job1>touch test.txt
    3. echo "Hallo, Welt!" > test.txt</job1>
    4. <job2>rm -rf /home/user123
    5. mkdir /home/user321</job2>
    6. ...


    Soweit so gut. In den einzelnen Tags steht also der "Code" den mein Script ausführen soll. Ich würde jetzt relativ naiv an das Problem gehen und sagen das mein Script etwa so aussehen müsste:

    Shell-Script

    1. #!/bin/bash
    2. # Und hier jetzt mein Problem. Hier muß das Tag aus meiner XML-Datei ausgelesen und dann ausgeführt werden.D.h. etwa in der Art
    3. Lese Tag <job1> aus irgendwas.xml und füge es hier ein bzw. führe es aus
    4. Lese Tag <job2> aus irgendwas.xml und füge es hier ein bzw. führe es aus
    5. ...


    Mit dem ausführen bin ich mir nicht so ganz sicher ob das so funktioniert wie ich mir das vorstelle. Kann ich den z.B. den Inhalt von Tag <job1> in mein ShellScript einfügen damit der Code ausgeführt wird, oder würde man das anders realisieren. Mir ist auch bewusst das man diese Aufgabe bestimmt leichter in php oder perl realisieren kann, aber da harperts bei mir ein wenig, aber wenn jemand einen guten Vorschlag in diese Richtung hat, wäre ich natürlich auch dafür sehr dankbar. So, ich hoffe ich hab mein Problem halbwegs vertändlich rübergebracht, ansonsten fragt einfach... ;)
  • Mir ist noch nicht ganz klar wofür du diese Variante benötigst.
    Wenn du keinen "Ich will das tun, um X zu lernen"-Ansatz verfolgst, sondern es dir schlicht um die Modularisierung deiner Shellskripte geht, empfehle ich eher die einzelnen, wie du es im Beispiel nennst, "Jobs" in schlichte Funktionen auszulagern.

    Eventuell fehlen aber noch zusätzliche Informationen über dein Projekt, die diesen Ansatz ausschließen.
  • Danke für Deine Antwort,

    also ganz ehrlich gesagt stammt die Idee von meinem Chef, der der Ansicht ist das man das so machen würde (also die XML Variante), aber das mit den Funktionen hört sich doch auch sehr gut an. Ich hab mit ShellScripting ehrlich gesagt das erste mal richtig zu tun und bin daher wirklich sehr dankbar wenn solche Vorschläge kommen. Nach deiner Aussage könnte ich also im Prinzip mehrere ShellScripte erstellen, von denen eines nur für die Funktionsaufrufe zuständig ist, und die anderen die Funktionen beinhalten? Hab ich das richtig verstanden? Das fänd ich so auch okay. Hättest Du vielleicht netter weise ein Beispiel für mich, also den Funktionsaufruf aus einem Script für eine Funktion die in einem anderen Script steht? Wäre echt super... Danke im Voraus .... ;)
  • Richtig; ein Shell-Script kümmert sich um den, vermutlich, kontextsensitiven Aufruf der verschiedenen Module des Skripts, indem es die in einem weiteren Shell-Script definierten Funktionen aufruft.

    Um ausgelagerte Funktionen für ein Shell-Script nutzbar zu machen gibt es zwei Notationen, die das selbe bewirken:

    Variante A: (hierbei das auf den Punkt folgende Leerzeichen beachten)

    Source Code

    1. . /some/other/file

    Variante B:

    Source Code

    1. source /some/other/file


    "source filename [arguments] Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename. If filename does not contain a slash, file names in PATH are used to find the directory containing filename. The file searched for in PATH need not be executable. When bash is not in posix mode, the current directory is searched if no file is found in PATH. If the sourcepath option to the shopt builtin command is turned off, the PATH is not searched. If any arguments are supplied, they become the positional parameters when filename is executed. Otherwise the positional parameters are unchanged. The return status is the status of the last command exited within the script (0 if no commands are executed), and false if filename is not found or cannot be read.
    "
    (Quelle: ManPage bash)

    Kann es sein, dass ihr aus dem Java-Umfeld kommt. Ich bilde mir ein, dort in XML-Dateien ausgelagerten Code gesehen zu haben.
  • Ja, zumindest mein Chef hat jahrelang als Java-Entwickler gearbeitet. Ich entwickle eigentlich in C++ bzw. C#, aber für ein Projekt muß ich mich jetzt mit ShellScripten rumärgern :( Egal, vielen Dank für Deine Hilfe, ich denke ich werde es mit Deiner Variante realisieren, da mir diese Art der Modularisierung viel besser gefällt.

    LG
    Sebi

    The post was edited 1 time, last by Sebi0815 ().