Shell-Script was Config speziell bearbeitet

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von beijo, 05.10.2008.

  1. beijo

    beijo Grünschnabel

    Dabei seit:
    05.10.2008
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo,

    ich Suche ein Shellscript, was mittels aufruf eine configdatei bearbeitet. Der Configfile sieht z.b. so aus:

    Code:
    subnet 192.168.1.0 netmask 255.255.255.0 {
    #        range 192.168.1.10 192.168.1.198;
    }
    host testclient {
            hardware ethernet 01:22:15:C9:E3:7B;
            fixed-address 192.168.1.40;
            filename "pxelinux.0";
            next-server 192.168.1.199;
            option subnet-mask 255.255.255.0;
            option broadcast-address 192.168.1.255;
            option routers 192.168.1.2;
            option domain-name-servers 192.168.1.2;
    }
    
    host client2 {
            hardware ethernet 01:22:15:B9:E3:7B;
            fixed-address 192.168.1.40;
            filename "pxelinux.0";
            next-server 192.168.1.199;
            option subnet-mask 255.255.255.0;
            option broadcast-address 192.168.1.255;
            option routers 192.168.1.2;
            option domain-name-servers 192.168.1.2;
    }
    host client3 {
            hardware ethernet 01:22:15:B9:E3:7B;
            fixed-address 192.168.1.40;
            filename "pxelinux.0";
            next-server 192.168.1.199;
            option subnet-mask 255.255.255.0;
            option broadcast-address 192.168.1.255;
            option routers 192.168.1.2;
            option domain-name-servers 192.168.1.2;
    }
    host client4 {
            hardware ethernet 01:22:15:B9:E3:7B;
            fixed-address 192.168.1.40;
            filename "pxelinux.0";
            next-server 192.168.1.199;
            option subnet-mask 255.255.255.0;
            option broadcast-address 192.168.1.255;
            option routers 192.168.1.2;
            option domain-name-servers 192.168.1.2;
    }
    
    das script soll jetzt per übergabe z.b. (./script client4 comment) bis zu client4 gehen und dann 3 und 4 zeilen weiter hüpfen und jeweils das "filename pxelinux.0" und "next-server 192.168.1.199" ausdokumentieren. dann das in dem config file abspeichern....das ganze soll anders rum natürlich auch funktionieren. hab bisher nirgendswo etwas gefunden wo man mittels sed und awk etwas bis zu einer zeilen suchen kann, aber dann einfach nochmal 3 zeilen und dann noch 1 zeile weiterhüpft und dort erst die veränderung macht.

    für eure hilfe wäre ich euch dankbar.

    grüße
    beijo
     
  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, 05.10.2008
    Zuletzt bearbeitet: 06.10.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Das Script wird dir hier keiner erstellen.
    Wir sind schließlich keine Skriptfabrik. ;)
    Aber ein paar hilfreiche Hinweise lassen sich schon geben.
    Dazu müsstest du aber schon sagen, um welche Shell und welches OS es sich handelt.

    Da gibt es nämlich gravierende Unterschiede.

    Zu GNU sed z.B.
    Da gibt es die Option -i -> ändert direkt in der Datei
    Unter Solaris wirst du damit im Gegensatz nicht weit kommen.

    Um z.B. die nächsten drei Zeilen nach einem Pattern-Match zu lesen und die dritte zu verändern:

    Code:
    echo -ne "Text\ntest=wert1\ntest2=wert2\ntest3=wert3\nweiteres\n"|
    sed -e '/test/{N;N;N;s/\(test3=wert3\)/#\1/}'
    Text
    test=wert1
    test2=wert2
    #test3=wert3
    weiteres
    
    Nur als Denkanstoß

    Wolfgang
     
  4. beijo

    beijo Grünschnabel

    Dabei seit:
    05.10.2008
    Beiträge:
    2
    Zustimmungen:
    0
    danke für deine hilfe ;)

    also wenn ich jetzt das
    Code:
     cat configfile | sed -e '/client2 /{N;N;N;s/\(client2\)/#\1/}'
    
    auf meinen configfile anwende kommt das dabei raus

    Code:
    subnet 192.168.1.0 netmask 255.255.255.0 {
    #        range 192.168.1.10 192.168.1.198;
    }
    host testclient {
            hardware ethernet 01:22:15:C9:E3:7B;
            fixed-address 192.168.1.40;
            filename "pxelinux.0";
            next-server 192.168.1.199;
            option subnet-mask 255.255.255.0;
            option broadcast-address 192.168.1.255;
            option routers 192.168.1.2;
            option domain-name-servers 192.168.1.2;
    }
    
    host #client2 {
            hardware ethernet 01:22:15:B9:E3:7B;
            fixed-address 192.168.1.40;
            filename "pxelinux.0";
            next-server 192.168.1.199;
            option subnet-mask 255.255.255.0;
            option broadcast-address 192.168.1.255;
            option routers 192.168.1.2;
            option domain-name-servers 192.168.1.2;
    }
    host client3 {
            hardware ethernet 01:22:15:B9:E3:7B;
            fixed-address 192.168.1.40;
            filename "pxelinux.0";
            next-server 192.168.1.199;
            option subnet-mask 255.255.255.0;
            option broadcast-address 192.168.1.255;
            option routers 192.168.1.2;
            option domain-name-servers 192.168.1.2;
    }
    host client4 {
            hardware ethernet 01:22:15:B9:E3:7B;
            fixed-address 192.168.1.40;
            filename "pxelinux.0";
            next-server 192.168.1.199;
            option subnet-mask 255.255.255.0;
            option broadcast-address 192.168.1.255;
            option routers 192.168.1.2;
            option domain-name-servers 192.168.1.2;
    }
    
    ich möchte aber jetzt ja dass am anfang der filename zeile ein # gesetzt wird / oder eben entfernt .... mhh
     
  5. #4 supersucker, 05.10.2008
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Ich würde mir ein perl-script schreiben, so ein sed-Einzeiler wird doch recht schnell extrem unübersichtlich.....

    Dafür müsstest du dir nur die Basics von Perl anschauen + regular expressions.
     
  6. #5 der_Kay, 05.10.2008
    Zuletzt bearbeitet: 06.10.2008
    der_Kay

    der_Kay Doppel-As

    Dabei seit:
    28.02.2006
    Beiträge:
    140
    Zustimmungen:
    0
    Hier ist eins:
    PHP:
    #!/usr/bin/perl
    $host $ARGV[0];

    $modify_on 0;

    while(
    $line = <STDIN>) {
        
    my $filtered_line $line;

        if( 
    $filtered_line =~ /^\\\s*host\\s+$host/) {
            
    $modify_on 1;
        }

        if (
    $modify_on) {
            if (
    $filtered_line =~ /^\s*filename/) {
                
    $filtered_line "#".$filtered_line;
            }
            
    elsif$filtered_line =~ /^\s*next-server/ ) {
                
    $filtered_line "#".$filtered_line;
            }
            
    elsif (my ($rest) = $filtered_line =~ /^\s*#(\s*filename.*)/) {
                
    $filtered_line $rest."\n";
            }
            
    elsif (my ($rest) = $filtered_line =~ /^\s*#(\s*next-server.*)/) {
                
    $filtered_line $rest."\n";
            }

            if ( 
    $filtered_line =~ /\}$/) {
                
    $modify_on 0;
            }
        }

        print 
    $filtered_line;
    }
    Benutzung
    Code:
    <diesesscript.pl>  < Eingabedatei clientX
    Problem ist, dass man natürlich nicht in einen zum Lesen geöffneten Filedescriptor schreiben kann. Du musst Deine dhcpd.conf vorher umkopieren.

    Wenn Du eine komplizierte und große dhcpd.conf hast wäre es überlegenswert ob Du die hosts in einer group unterbringst, um die vielen options zu sparen.

    Schreib doch die MAC-Adresse, die IP und den Hostnamen in eine MySQL-Datenbank, editiere die Einträge mit phpMyAdmin, lass ein ein Perl-Script die Host-Sektion immer komplett neu erzeugen und binde diese mit include in die dhcpd.conf ein.
     
  7. #6 Wolfgang, 06.10.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Wenn du "host client2" durch "#host client2" ersetzen willst, dann musst du das auch in die Klammer aufnehmen.

    BTW Eine fette MySQL laufen zu lassen, nur weil das Editieren einer Datei zu kompliziert sein soll?
    Unglaublich...


    Wolfgang
     
  8. #7 saeckereier, 06.10.2008
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Wolfgang, warum nicht? So ein MySQL Dingens lässt sich als Konfigdatenbank für diverse Dienste benutzen (ich nehme allerdings LDAP für mein DHCP) und wenn ich so auf meine Systemauslastung schaue, dann sehe ich, dass mich ein MySQL der sowieso den Großteil der Zeit nix macht, mir keine Nachteile bringt. Und mal ehrlich, die Datenbank steht auch innerhalb von Minuten. Allerdings kann man statt dem PHP Management Tool dann auch die Aufgabe in PHP-Cli umsetzen, also Zeit spart man wohl nicht so sehr..

    EDIT: Oha, den Vorschlag, dann daraus die Config zu generieren habe ich nicht gesehen. Dann finde selbst ich das übertrieben. Ich dachte man könnte den DHCP Server an die DB hängen.
     
  9. #8 Aqualung, 06.10.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Manchmal vielleicht doch :)...; mit Deinen hilfreichen Hinweisen war das doch nicht sooo schwer:
    Einen GNU-sed vorraussetzend:

    Hin:
    Code:
    cat comment.sh
    #!/bin/sh
    
    [ $# -lt 2 ] && echo "Usage $0 <string> file" && exit 1
    
    sed -i /"$1"/'{N;N;N;s/[ ]*filename/#&/};'/"$1"/'{N;N;N;N;s/[ ]*next\-server/#&/}' "$2"
    
    Zurück:
    Code:
    cat uncomment.sh
    #!/bin/sh
    
    [ $# -lt 2 ] && echo "Usage: $0 <string> file" && exit 1
    
    sed -i /"$1"/'{N;N;N;s/#//};'/"$1"/'{N;N;N;N;s/#//}' "$2"
    
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 der_Kay, 06.10.2008
    Zuletzt bearbeitet: 06.10.2008
    der_Kay

    der_Kay Doppel-As

    Dabei seit:
    28.02.2006
    Beiträge:
    140
    Zustimmungen:
    0
    Genau das Umgekehrte passiert hier. Leider hats im Quellcode die Backslashes erwischt.
    Nicht, wenn das Ganze ein Tool mit Weboberfläche werden soll, um eine Serverfarm remote zu administrieren. Und das soll's tatsächlich werden...
     
  12. #10 saeckereier, 07.10.2008
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Wo bitte steht das im Eröffnungspost? Konfigurationsmanagement ist was anderes und da macht es wieder Sinn. In der Regel verteilt diese Engine dann die Konfigurationen ja auf diverse Hosts. Für die gestellte Frage oversized.
     
Thema:

Shell-Script was Config speziell bearbeitet

Die Seite wird geladen...

Shell-Script was Config speziell bearbeitet - Ähnliche Themen

  1. shell-script mit plink starten

    shell-script mit plink starten: Hallo, auf meinem kleinen QNAP-Backupserver möchte ich von meinem Windows 7 PC mittels Windows-Batch ein kleines shell script starten. So sieht...
  2. Hilfe bei Shell-Scripting

    Hilfe bei Shell-Scripting: Moinsen! Ich soll für ein Labor im Studium folgende Skripte schreiben und bräuchte da etwas Unterstützung! 1. frename.sh <string> Hängt...
  3. Welches shell-script ist ausführbar?

    Welches shell-script ist ausführbar?: Hallo Community, Dies ist mehr eine Verständnisfrage, weil ich ich nicht ganz Durchblicke! Ich habe Google Earth via einem *.deb Paket...
  4. Shell-Script zum auslesen von Dateien aus versch. Verzeichnissen

    Shell-Script zum auslesen von Dateien aus versch. Verzeichnissen: Hallo Leute, ich habe ein Problem wo ich mit meinem Wissensstand einfach nicht weiterkomme: Ich habe etwa 3000 verschiedene Verzeichnisse in...
  5. Shell-Script > neustes Aenderungsdatum von mehreren Dateien auslesen

    Shell-Script > neustes Aenderungsdatum von mehreren Dateien auslesen: Hallo zusammen, Dies ist meiner erster Post, mit Boardsuche wurde ich leider nicht fündig, aber ich hoffe, jemand weiss Rat :)! Folgende...