Skript das Überblick über andere Skripte schafft

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von H_E_X_E_R, 31.05.2006.

  1. #1 H_E_X_E_R, 31.05.2006
    H_E_X_E_R

    H_E_X_E_R Grünschnabel

    Dabei seit:
    31.05.2006
    Beiträge:
    3
    Zustimmungen:
    0
    Hi Leutz,
    ich bin im Skripten leider noch nicht fit. Besonders awk & sed sind noch ein rotes Tuch....
    ICh habe das Problem das ich mehrere Shell & Perl Skripte laufen habe die ihrerseits Shell- & Perl- Skripte aufrufen. Ich soll nun mir einen Überblick verschaffen. Da sich diese Abläufe auch noch oftmals ändern brauche ich ein Skript welches automatisch einen "Report" erstellt ---> Beispiel :

    "Report Hauptskript 31.05.2006"
    -> Hauptskript.sh
    -->Nebenskript.sh
    -->Unternebenskript.pl
    -->Wasweisich.pl
    -->nocheins.sh
    -->schonwiedereins.sh
    -->zweitesnebenskript.pl

    vielleicht kann auch das ende der skripte mit "reportet" werden:

    Habe mir schon etwas einfallen lassen aber ... die Regulären Ausdrücke...

    #!/usr/bin/perl
    @Zeilen = ("");
    open(SKRIPT, "<$ARGV[0]") || die "Fehler!";
    print $ARGV[0], "--geoeffnet!-------\n";
    while(<SKRIPT>)
    {
    push(@Zeilen,$_);
    }
    close(SKRIPT);
    for(@Zeilen)
    {
    if(/.sh/)
    {
    print $_;
    # hier müsste der Skriptname separiert werden
    # und anschl. das Skript geöffnet werden und genau wie
    # hier (in diesem Skript) verfahren werden (rekursiv)
    #
    }
    }

    ----------------
    die Zeilen im Skript sehen in etwa so aus(runRecompileInvalid.sh ->müsste separiet werden):

    write_log $LOG "--- calling recompile views and procedures"
    execute_package "TRUE" "$PATH_BASE/preLoad/recompileInvalid" "runRecompileInvalid.sh"
    write_log $LOG "--- returning from recompile views and procedures"

    Kann mir jemand weiterhelfen ?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 01.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Ich werde dir jetzt nicht deinen Spaß verderben, und das Script für dich schreiben. ;)

    Dazu sind mir schon die zu suchenden Kriterien nicht eindeutig genug.
    Das kannst nur du am besten wissen.

    Aber einen schematischen Vorschlag will ich dir geben.

    Wenn ich dich richtig verstehe, suchst du nach Einträgen, die in etwas soetwas wie der use File::Finde;#unter perl
    oder include Datei; beinhalten, und willst dann wissen welche Datei diese aufruft.

    Korrigier mich, wenn ich das falsch versehe.

    Als Einzeiler alle Dateien finden, die use <modulname> benutzen:
    Code:
    perl -M"File::Find" -le 'find(sub{return if -d;$f=$_;open IN,"<$f";chomp(@in=<IN>);close IN;for $l(@in){print "In $f kommt $& vor" if /use\s.*;?/}},"./")
    Nun mal die grobe Erklärung dazu:

    Ich lade das Modul File::Finde
    Dieses stellt eine Funktion find bereit, die als ersten Parameter eine anonyme Funktion (referenz auf eine Funktion)sub{...}erwartet, und als zweiten das Startverzeichnis "./"
    Der Dateiname steht dann in $_
    Ich übergehe Verzeichnisse, return if -d ,
    speichere den Dateinamen in $f
    und öffne diese Datei zum Lesen.
    Dann speichere ich die gesamte Datei in @in und entferne gleich die angehängten \n: chomp(@in=<IN>);
    Nun durchlaufe ich dieses Array, printe Dateiname und was ich dort gefunden habe, wenn der Regexp erfolgreich war.

    print "In $f kommt $& vor" if /use\s.*;?/


    Thats all
    ;)
    Ich hoffe du kannst das als Anhaltspunkt nehmen.

    Ist natürlich dirty code, soll aber das Prinzip klar machen.
    Du musst natürlich eventuell noch testen, ob es die Datei gibt und diverse Fehler abfangen.
    Kleiner Tipp:

    - Du solltest dir das als Funktionen aufbauen.
    - Dann musst du erstmal die Suchkriterien eindeutig anylysieren.
    - Mehrere Suchkriterien lassen sich in einem Arryay zusammenfassen, und mittels $suchstring=join "|", @sucharray; zu einem schönen oder Suchstrig zusammenfassen und beim Matcher als Stringvariable einsetzen.if /$suchstring/. Auch beim Ersetzen sehr nützlich als hash.

    Zum Verstehen: um z. B. alle Umlaute zu suchen ginge folgendes kleine Konstrukt.
    Code:
    my @uml=(..);# hier alle Umlaute rein
    my $suchstring=join("|", @uml);
    ....
    if /$suchstring/
    
    Das könntest du auf deine gesuchten Dateinamen anwenden.

    Hoffe etwas weiter geholfen zu haben.
    Stehe für weitere Fragen gerne offen.
    :headup:
    Gruß Wolfgang
     
  4. #3 H_E_X_E_R, 13.06.2006
    H_E_X_E_R

    H_E_X_E_R Grünschnabel

    Dabei seit:
    31.05.2006
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo Wolfgang ich danke Dir für deine Antwort,
    die Lösung gestaltet sich leider noch etwas schwieriger als ich gedacht habe.
    Um das Problem etwas genauer zu beschreiben muss ich weiter ausholen:
    AUf unserem Rechenzentrum-Server läuft ein "Nacht-Batch" der in ca. 10 Stunden durchläuft. In diesem Batch werden Umgebungsvariablen gesetzt und 3 Skripte aufgerufen. Diese 3 Skripte rufen widerum Skripte auf 8 das eine 23 das andere und das dritte Skript(Nachverabeitung) 17 weitere Skripte (alles gemischt von Perl .. Shell bis Phyton..
    Wenn diese Skripte nicht noch weitere Skripte aufrufen würden, würde ich mir ja die Arbeit machen alles durchzuzählen (gähn) doch leider werden da nochmal andere Skripte aufgerufen....
    Zudem soll die Zeit (10 Stunden) auf unter 8 gedrückt werden, damit das Backupfenster noch groß genug ist, um nicht das "Tagesgeschäft" zu stören.
    Da von 2 Seiten optiemiert wird ist es schwierig einen Überblick über die Skripte zu bekommen.
    Ich brauche eine Zusammenfassung die ausgiebt:
    SKRIPT.sh ruft auf:
    ###skript437.pl, skripr23.sh, skript11.sh
    +++SKRIPT437.pl ruft auf:
    #####skriptxyz.sh, skript0815.pl, skriptxyz...
    ++++++SKRIPTXYZ.sh ruft auf:
    #################skriptxyz.sh, skript0815.pl, skriptxyz,.........
    ##########################SKRIPT0815.pl ruft auf:
    ..........
    usw.
    so das ich einen Überblick erhalte, welche Skripte (bei der Optimierung) dazukommen oder wegfallen oder welche Skripte besonders oft aufgerufen werden (da sich bei diesen Zeitoptimierungen besonders lohnen).


    Ich war jetzt 2 Wochen auf einem Lehrgang (Zertifizierung) habe deshalb das Thema schleifen lassen. Nur soviel habe ich schon begriffen, das es schwierig wird mein Skript "zum Überblick schaffen" rekusiv aufzurufen ...
    Weiterhin habe ich das Problem der unterschiedlichen Skripttypen (Shell,Perl,Phyton) so das die Suchmuster nicht überall gleich sein könnten...

    Ich muss diese Woche noch einige Sachen aufarbeiten und werden mich nächste Woche noch mal ransetzen. Wenn noch jemand einen Tip hat würde ich mich sehr über einen Thread von Euch freuen.

    Besonderen Dank schon mal an Wolfgang, leider bin ich (noch) Lausiger-Anfänger und muss mir deshalb dein Skript noch mal auf der Zunge zergehen lassen... soviel ich aber verstehen suchst dein Einzeiler im Dateisystem (dort liegen alle 260 Skripte nach Programmiersprachen getrennt z.B. /SH/script023.sh,script032.sh.....
    /perl/script234.pl,script34.pl.....
    usw.
    meine Hoffnung ist das ich mit dem Skript die Reihnfolge in der die einzelden Skripte ausgeführt werden zu sehen bekomme...
    Daher sollte das Auslesen der Skripte auch in der selben Chronologie wie das Ausführen der Skripte erfolgen (OH Gott was mache ich mit bedingten aufrufen ... wenn Bedingung (eigendlich nie) dann rufe script03.pl auf)..

    OK allen Lesern und Thread Postern vielen Dank im Voraus ich lasse von mir hören...


    MfG
    H_E_X_E_R
     
  5. #4 Xanti, 13.06.2006
    Zuletzt bearbeitet: 13.06.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Etwas quick&dirty, aber vielleicht hilfts Dir. Die Mustererkennung müsste eventuell noch modifiziert werden.

    ss.pl:
    Code:
    #!/usr/bin/perl -w
    
    use strict;
    my($script) = @ARGV;
    my $pre = '';
    open OUTPUT, ">output";
    searchscript($script);
    close OUTPUT;
    
    sub searchscript {
      my($script) = @_;
      $pre .= '###';
      open FILE, "<$script";
      foreach (<FILE>) {
        if (!/^#/ and (/([\w\-\.\/]+\.sh)/ or /([\w\-\.\/]+\.pl)/)) {
          my $nscript = qx/which $1/;
          chomp $nscript;
          if (-x $nscript) {
              print OUTPUT "$pre $script -> $nscript\n";
              searchscript($nscript)
          }
        }
      }
      close FILE;
      $pre = substr $pre, 0, 3
    }
    
    Aufrufen mittels ./ss.pl skriptname. Die Auswertung wird in output geschrieben.

    Gruss, Xanti

    edit: Suchmuster verfeinert.
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Skript das Überblick über andere Skripte schafft

Die Seite wird geladen...

Skript das Überblick über andere Skripte schafft - Ähnliche Themen

  1. Kontextmenü mit einem Skript verbinden

    Kontextmenü mit einem Skript verbinden: Abend, wenn ich z. B. eine simple Umwandlung eines Bildformates in ein anderes über das KDE-Kontextmenü (Servicemenü nennt es sich im KDE oder...
  2. [Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen

    [Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen: Hallo, ich hoffe ihr könnt mir helfen. Ich entwerfe im Moment ein Skript, welches den Callmonitor (Telnet) auf meiner FritzBox abfragt und wenn...
  3. Kunden-Skript ausgelöst durch Linux-Cluster Pacemaker

    Kunden-Skript ausgelöst durch Linux-Cluster Pacemaker: Hallo! Ich komme aus der AIX-Welt wo es im HACMP-Cluster die Möglichkeit der Ausführung eines Start- bzw. Stop-Skriptes im Zuge einer...
  4. Shell-Skript Datum in einer Datai suchen

    Shell-Skript Datum in einer Datai suchen: Hallo zusammen Ich komm eigentlich aus der Klicki-Bunti-Welt von Windows. Seit geraumer Zeit versuche ich meine Künste mit verschiedenen...
  5. Nmap 7.10 mit zahlreichen neuen Skripten und Fingerabdrücken

    Nmap 7.10 mit zahlreichen neuen Skripten und Fingerabdrücken: Der Nmap-Entwickler Gordon »Fyodor« Lyon hat bekannt gegeben, dass eine neue Version des populären, freien Netzwerkscanners veröffentlicht wurde....