hosts-Datei per shell-skript verändern

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Breze, 28.12.2005.

  1. Breze

    Breze Grünschnabel

    Dabei seit:
    28.12.2005
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo,
    ich bin in Sachen shellscripting ein absoluter Anfänger, aber vielleicht hat ja jemand genau das was ich bräuchte, oder zumindest so etwas ähnliches.

    Ich bräuchte ein Shellscript, das mir

    1. den Wochentag bestimmt (z.B. Dienstag)

    und dann anhand dieses Wochentages in der Datei etc/hosts eine bestimmte IP-Adresse ändert. Diese IP-Adresse findet man wiederum in einer anderen Datei die in etwa so aussieht:

    Montag 192.168.1.1
    Dienstag 192.168.1.3
    Mittwoch192.168.1.15

    Vielleicht hat ja jemand schon so etwas in der Art programmiert.
     
  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 stoerfang, 28.12.2005
    stoerfang

    stoerfang Doppel-As

    Dabei seit:
    11.10.2005
    Beiträge:
    125
    Zustimmungen:
    0
    Ort:
    Detmold
    hallo,

    würde an Deiner Stelle, die IP-Adressen und Wochentage fest als Variablen in Deinem Script hinterlegen.

    1. Führe den Befehl date aus, nur dass die Ausgabe in einer Datei geschrieben wird.

    2. an Hand des Befehls grep, oder uniq kannst Du die Zeichenkette, z.B. Wed, für Mittwoch, mit dem Inhalt der Variable, die Du oben mit Mittwoch deklariert hast vergleichen und dann entsprechend die IP-Adresse zuordnen.

    Gruss stoerfang
     
  4. #3 ninguno, 28.12.2005
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    den wochentag (0-6) erhältst du mit
    Code:
    date +%w
    die entsprechende ip-adresse dann mit
    Code:
    NEUEADRESSE=$(grep Mittwoch adressen.txt|cut -d" " -f2)
    die ersetzung in der /etc/hosts musst du dann halt mit sed oder awk machen, z.b.
    Code:
    sed "s/.* hostxy/$NEUEADRESSE hostxy/" /etc/hosts
     
  5. #4 Wolfgang, 28.12.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Eine Scriptfabrik sind wir hier eigentlich nicht.
    Also was hast du selbst versucht bisher?
    Wo ist das Problem?
    Welche Shell verwendest du?

    @ninguno ?

    $date +"%w"
    3
    $ date --version
    date (coreutils) 5.2.1
    Geschrieben von David MacKenzie.
    Welches date verwendest du?
    $date "%A"
    Mittwoch

    Wenn mehr als ein Leerzeichen als Trennzeichen verwendet wird, hilft tr -d weiter, damit cut das richtige Feld ausgibt.

    GNU sed kennt die Option -i zum direkten Editieren (insert)

    Dann sollte es klappen.

    Gruß Wolfgang
     
  6. #5 Xanti, 28.12.2005
    Zuletzt bearbeitet: 28.12.2005
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Wenn Du in Deine Datei die Wochentage englisch schreibst, kommst Du an die ip mittels

    Code:
    NEUEADRESSE=$(grep $(date +%A) adressen.txt|cut -d" " -f2)
    Gruss, Phorus

    edit: ich sehe gerade, es kommt auf die Lokalisation an, ob date englische oder deutsche Wochetage ausgibt.
     
  7. #6 ninguno, 28.12.2005
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    ja die option %A gibts bei mir auch, die gibt die namen halt in englisch aus, deswegen option %w
    Code:
    WEEKDAYS=("Sonntag" "Montag" "Dienstag" "Mittwoch" "Donnerstag" "Freitag" "Samstag")
    echo ${WEEKDAYS[$(date +%w)]}
     
  8. #7 Wolfgang, 28.12.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Es kommt auf die gesetzte Spracheinstellung des jeweiligen Users an was zurückgegeben wird.
    Ich kann diese date aber mit auf den Weg geben.
    Example:
    Code:
    $ LC_ALL="POSIX" date +"%A"
    Wednesday
    $ LC_ALL="de_DE@euro" date +"%A"
    Mittwoch                         
    Gruß Wolfgang
     
  9. #8 ninguno, 28.12.2005
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    du hast recht. so gehts natürlich auch :)
     
  10. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Mich würde interessieren, warum sich die ips tagesabhängig verändern.
     
  11. Breze

    Breze Grünschnabel

    Dabei seit:
    28.12.2005
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo,

    ersteinmal vielen Dank für eure Hilfe, bin schon ein großes Stück weiter gekommen.

    Mein Skript sieht mittlerweile folgendermaßen aus:

    #!/bin/sh

    WOCHENTAG=`date +%A`
    case "$WOCHENTAG" in

    Monday)NEUEADRESSE=$(grep $WOCHENTAG GEVO_LAENDER.txt|cut -d" " -f2)
    sed "s/.* APPSERVER/$NEUEADRESSE APPSERVER/" etc/hosts;;

    Tuesday)NEUEADRESSE=$(grep $WOCHENTAG GEVO_LAENDER.txt|cut -d" " -f2)
    sed "s/.* APPSERVER/$NEUEADRESSE APPSERVER/" etc/hosts;;

    Wednesday)NEUEADRESSE=$(grep $WOCHENTAG GEVO_LAENDER.txt|cut -d" " -f2)
    sed "s/.* APPSERVER/$NEUEADRESSE APPSERVER/" /etc/hosts;;

    Thursday)NEUEADRESSE=$(grep $WOCHENTAG GEVO_LAENDER.txt|cut -d" " -f2)
    sed "s/.* APPSERVER/$NEUEADRESSE APPSERVER/" etc/hosts;;

    Friday)NEUEADRESSE=$(grep $WOCHENTAG GEVO_LAENDER.txt|cut -d" " -f2)
    sed "s/.* APPSERVER/$NEUEADRESSE APPSERVER/" etc/hosts;;

    esac

    #reboot


    Das einzige Problem was ich nun noch habe ist, das nach ausführen des Skriptes mir die hosts-Datei mit der veränderten IP richtig angezeigt wird, diese Änderung aber nicht gespeichert wird. Was muss ich da noch tun, damit die Änderungen auch übernommen werden.

    Gruss
    Breze
     
  12. #11 ninguno, 28.12.2005
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    man sed
    schau dir den schalter -i zu sed an
     
  13. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Ich verstehe den Sinn Deiner case-Umgebung nicht.
     
  14. Breze

    Breze Grünschnabel

    Dabei seit:
    28.12.2005
    Beiträge:
    4
    Zustimmungen:
    0

    Ganz einfach:

    Ich sitze hier in einer Testumgebung eines großen Elektronikdiscounters wo deren Warenwirschaftssystem getestet wird. Dazu gehören u. a. auch Kassen die mit LINUX laufen und die mit einer Datenbank verbunden sind.
    Die IP der Datenbank bekommt die Kasse eben aus der etc/hosts.
    Wir haben aber hier in unserer Testumgebung nicht so viele Kassen wie Datenbanken, und damit ich nicht jeden Tag per Hand diesen Eintrag ändern muss werde ich das ganze nun automatisieren, mit Hilfe dieses Scripts und eines Eintrages in der Crontab.

    Gruss
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 Wolfgang, 28.12.2005
    Zuletzt bearbeitet: 29.12.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ich sehe hier auch ein useless case.
    Das macht doch nur Sinn, wenn du abhängig von verschiedenen Bedingungen verschiede Aktionen willst.

    Du hast wohl etwas um die Ecke gedacht, denn so kompliziert muss es nicht sein. ;)
    Passiert schon mal.
    Aber wenn du wirklich mit case arbeiten willst, dann brauchst du bei grep nicht mehr die variable $Wochentag einsetzen, sondern kannst gleich nach Klartext suchen.
    Example:
    case "$WOCHENTAG" in

    Monday)NEUEADRESSE=$(grep Montag GEVO_LAENDER.txt|cut -d" " -f2)


    Wie du es machst, machst du - egal welche Bedingung zutrifft - immer das Gleiche.

    Aber das geht eleganter:
    Example:
    Code:
    #wir haben eine Variable, die wir am Anfang festlegen:
    [b]Wochentag=$(date +"%A")[/b]
    # nun holen wir die zugehörige IP aus einer datei und speichern sie in einer weiteren Variable:
    [b]NEWIP=$(grep $WOCHENTAG GEVO_LAENDER.txt|cut -d" " -f2)[/b]
    #Nun haben wir schon die richtige IP, brauchen also kein select case mehr
    #einfach ersetzen bei GNU sed mit Option -i
    [b]sed -i -e "s/.*\(APPSERVER\)/$NEWIP \1/g" /etc/hosts[/b]     
    Ohne Kommentar sind das drei Zeilen.

    Das geht sogar noch kürzer, aber das lassen wir jetzt mal, soll ja verständlich sein. ;)
    Ohne GNU sed kannst du dir mit perl behelfen.
    Das geht fast genauso, nur musst du die Variable NEWIP exportieren und dann per $ENV{NEWIP} darauf zugreifen.
    Code:
    [b]export NEWIP && perl -pi -e '~s/.*(APPSERVER)/$ENV{NEWIP} $1/ig' etc/hosts[/b]                                 
    Dass sollte sogar mit minimalistischem Linux gehen, denn perl ist essentiell für Linux.

    Den Einzeiler erspar ich dir jetzt mal.

    Hoffe verständlich gewesen zu sein.

    Gruß Wolfgang
     
  17. Breze

    Breze Grünschnabel

    Dabei seit:
    28.12.2005
    Beiträge:
    4
    Zustimmungen:
    0
    Danke Wolfgang_1, für die Erklärung, habs jetzt kapiert das die case-Umgebung überflüssig ist.
    Der Perl-Befehl funktioniert wunderbar.

    Wenn ich das ganze aber mit sed mache kennt er die Option -i aber nicht.

    Ausgabe auf sed -V:

    GNU sed version 3.02

    Ist das eine zu alte Version?
     
Thema:

hosts-Datei per shell-skript verändern

Die Seite wird geladen...

hosts-Datei per shell-skript verändern - Ähnliche Themen

  1. [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...
  2. 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...
  3. Artikel: Shell-Skripte - Kleine Helfer selbst gemacht

    Artikel: Shell-Skripte - Kleine Helfer selbst gemacht: Mit Shell-Skripten sind kleine Helfer schnell selbst geschrieben. Sie haben den Vorteil, dass man sich keine langen Befehlszeilen auswendig merken...
  4. Hilfe bei einfachem Shell-Skript

    Hilfe bei einfachem Shell-Skript: Hallo, Ich bin auf der Suche nach jemandem der mir ein recht einfaches Shellskript gegen kleine Bezahlung erstellen könnte. Bei Interesse...
  5. Shell-Skript nicht doppelt starten

    Shell-Skript nicht doppelt starten: Hallo zusammen. Ich habe hier ein Problem mit meinem Shell-Skript, das ist seit Tagen zu lösen versuche. X( Bisher leider erfolglos. Ziel: Das...