Announcement

Collapse
No announcement yet.

Dringend Hilfe bei bash - Shellscript gesucht: Strings in Konfigdateien

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dringend Hilfe bei bash - Shellscript gesucht: Strings in Konfigdateien

    Hallo zusammen,
    bin leider noch kein Skript-Guru, das folgende Problem wird wohl sehr
    in die Tiefen von substr, split, regulären Ausdrücken gehen, mit denen ich noch etwas auf Kriegsfuss stehe - wie immer soll aber eine schnelle Lösung her :-( Also: ich habe folgende USER/PASSWORT-Datei, aus denen ich die jeweils ZUSAMMENGEHÖRENDEN User/Passwörter auslesen möchte:

    Text1.admin.user=Hans
    Text1.admin.password=Dampf

    Text1.access.user=Klaus
    Text1.access.password=Krampf

    text2.admin.user=Willi
    text2.admin.password=stumpf

    text2.access.user=heiner
    text2.access.password=keiner

    text3.admin.user=reiner
    text3.admin.password=nocheiner

    text3.access.user=thomas
    text3.access.password=owas

    text4.admin.user=kalli
    text4.admin.password=malli

    text4.access.user=sack
    text4.access.password=mack

    => immer gleich in den Strings ist access.user=<username> (bzw. admin.user=<username>)
    => immer gleich in den Strings ist auch access.password=<passwort> (bzw. admin.passwort=<passwort>)
    => für ein Paar z.B. admin.user/admin.password ist der vorangehende Text (z.B. text4) immer gleich (ebenfalls für den zugehörigen access user)
    => die genauen Text-Präfixe kenne ich aber nicht genau zum Programmlauf,
    es können auch mehr Paare sein als hier angegeben, also muss ich suchen was zusammengehört, aber wie :-) ?
    => die Zeilen könnten auch durcheinander stehen !
    => Problem ist nun in einem shellscript die RICHTIGEN ZUSAMMENGEHÖRENDEN usernamen/passworte für die access user und admin user herauszufiltern
    und in einer Schleife die jeweils zusammengehörenden Wertepaare (z.B. ... kalli/malli, sack/mack ...) zu übergeben, in einem Array? in mehreren temporären files (soviele wie Wertpaare)? Was evtl. anderes würde sich am besten eignen? (damit ich nachher mit einem fixen Datenbankconnectstring per sqlplus testen kann, ob auch alle diese user/passwörter auf die DB kommen bzw. dort eingetragen sind; dies ist kein script problem mehr für mich, aber vorheriges ...)
    => die algorithmische Schwierigkeit ist hier (noch) für mich, dass ich eben nicht
    z.B den "text3.access.user" mit dem "text1.access.password" zusammenbringen will, sondern die Paare mit dem gleichen Textpräfix

    So ich hoffe, ich habe mein Problem nicht zu ausführlich geschildert und es ist verständlich geworden :-)
    Für schnelle Hilfe wäre ich sehr dankbar :-)

  • #2
    Connect-Strings

    Hallo Paranormal,

    eine reine Shell-Script-Lösung könnte so aussehen:
    Code:
    #!/usr/bin/bash
    # connect_strings.sh
    
    typeset -r inFile=password.in
    typeset -r sortFile=password.sort
    typeset -r outFile=password.out
    
    # Passwort-Datei sortieren
    # nach Sortierung:
    #  <text>.[access|admin].password=<password>
    #  <text>.[access|admin].user=<user>
    sort $inFile > $sortFile
    
    # Connect-Strings erzeugen
    rm -f $outFile 2>/dev/null
    s_pattern=P
    for s_entry in $(cat $sortFile); do
        if test $s_pattern = "P"; then
            # shortest string without "*.password="
            s_password=${s_entry#*.password=}
            s_pattern=U
        else
            # shortest string without "*.user="
            s_user=${s_entry#*.user=}
            echo ${s_user}/${s_password} >> $outFile
            s_pattern=P
        fi
    done
    Mit einigen Anpassungen sollte das deinen Anforderungen genügen.
    $> man bash # Parameter Expansion

    Siegfried

    Comment

    Working...
    X