script verbessern...

  • Hi all,

    ich bin nicht so der linux Fachmann, aber ich erstelle gerade ein Script das ein paar Dinge automatisch machen soll. Wenn mir jemand ein paar Tips geben könnte wie ich das folgende (besser) hinbekomme wäre ich dankbar.

    Meine Probleme:

    1. wie kann ich in der /boot/grub/menu.lst den eintrag timeout=X auf timeout=1 setzten ohne die Datei durch kopieren einer eigenen zu ersetzten (so mache ich es im beispiel unten zur Zeit).

    2. Crontab
    Wie kann ich das einfacher machen und vor allem wie kann ich den Eintrag hinzufühgen ohne bestehende cron einträge zu löschen (das passiert mit dieser lösung nämlich)

    Schonmal im vorraus: Danke !!

  • fangen wir doch erst mal mit dem GRUB an:-)

    Code
    M=/boot/grub/menu.lst
    cp -a $M $M.bk
    awk '{ if (match($0, "^(timeout[ \t]*)", a)) print a[1] "1"; else print }' < $M.bk > $M


    bzgl. crontab:

    haeng es doch einfach direkt an 'etc/crontab' dran, oder spricht was dagegen? Dann
    brauchst du den crontab Aufruf nicht.

    Edited once, last by sparkie (July 8, 2006 at 6:22 PM).

  • danke, beides funktioniert wunderbar, allerdings habe ich das Problem dass ich deine Lösung nicht verstehe und sie gerne auf ein weiteres Problem anwenden möchte:

    ENABLED="1" soll in /etc/default/vdradmin gesetzt werden. Kannst du mir deine Lösung etwas erläutern und/oder eine angepasste Lösung aufzeigen?

    desweiteren frage ich mich ob das Folgende nicht eleganter geht, auch wenns so funktioniert:

    Code
    echo "deb http://ftp2.de.debian.org/debian sarge main non-free contrib" >>/etc/apt/sources.list
    echo "deb http://security.debian.org/ sarge/updates main contrib non-free" >>/etc/apt/sources.list
    echo "deb http://www.debian-multimedia.org sarge main" >>/etc/apt/sources.list
    echo "deb http://e-tobi.net/vdr-experimental sarge base backports addons vdr-multipatch" >>/etc/apt/sources.list
    echo "deb http://www.heise.de/ct/ftp/projekte/vdr5 updates/" >>/etc/apt/sources.list

    Edited once, last by allow (July 8, 2006 at 7:42 PM).

  • Quote

    ENABLED="1" soll in /etc/default/vdradmin gesetzt werden. Kannst du mir deine Lösung etwas erläutern und/oder eine angepasste Lösung aufzeigen?

    zur Erklaerung von oben:

    Code
    { if (match($0, "^(timeout[ \t]*)", a)) print a[1] "1"; else print }


    Der awk fuehrt das zwischen den geschweiften Klammern fuer jede Zeile, die er einliest, aus.
    Dabei wird $0 durch die gelesene Zeile ersetzt. Wenn 'timeout' ganz am Anfang der Zeile
    steht (deswegen das '^') dann setzt er das Array a auf. Und zwar so, dass der Inhalt von
    Index 1 dem entspricht, was zwischen den runden Klammern steht. Also a[1] nimmt den Wert von
    'timeout[ \t]*' an. Abhaengig vom Match gibt er anschliessend die unveraenderte oder
    modifizierte Zeile aus.
    Angepasste Loesung:

    Code
    { if (match($0, "^(ENABLED=)", a)) print a[1] "\"1\""; else print }
    Quote

    desweiteren frage ich mich ob das Folgende nicht eleganter geht, auch wenns so funktioniert:

    Code
    echo "deb http://ftp2.de.debian.org/debian sarge main non-free contrib" >>/etc/apt/sources.list
    echo "deb http://security.debian.org/ sarge/updates main contrib non-free" >>/etc/apt/sources.list
    echo "deb http://www.debian-multimedia.org sarge main" >>/etc/apt/sources.list
    echo "deb http://e-tobi.net/vdr-experimental sarge base backports addons vdr-multipatch" >>/etc/apt/sources.list
    echo "deb http://www.heise.de/ct/ftp/projekte/vdr5 updates/" >>/etc/apt/sources.list

    am besten alles was angehaengt werden soll komplett in eine eigene Datei. Und anschliessend

    Code
    cat content_to_add >> /etc/apt/sources.list
  • Quote

    Original von allow
    desweiteren frage ich mich ob das Folgende nicht eleganter geht, auch wenns so funktioniert:

    Code
    echo "deb http://ftp2.de.debian.org/debian sarge main non-free contrib" >>/etc/apt/sources.list
    echo "deb http://security.debian.org/ sarge/updates main contrib non-free" >>/etc/apt/sources.list
    echo "deb http://www.debian-multimedia.org sarge main" >>/etc/apt/sources.list
    echo "deb http://e-tobi.net/vdr-experimental sarge base backports addons vdr-multipatch" >>/etc/apt/sources.list
    echo "deb http://www.heise.de/ct/ftp/projekte/vdr5 updates/" >>/etc/apt/sources.list

    So zum Beispiel?

    Code
    cat >>/etc/apt/sources.list <<SOURCES
    deb http://ftp2.de.debian.org/debian sarge main non-free contrib
    deb http://security.debian.org/ sarge/updates main contrib non-free
    deb http://www.debian-multimedia.org sarge main
    deb http://e-tobi.net/vdr-experimental sarge base backports addons vdr-multipatch
    deb http://www.heise.de/ct/ftp/projekte/vdr5 updates/
    SOURCES

    siehe man bash, Stichwort "Here Documents"

  • Quote

    wie kann ich in der /boot/grub/menu.lst den eintrag timeout=X auf timeout=1 setzten ohne die Datei durch kopieren einer eigenen zu ersetzten (so mache ich es im beispiel unten zur Zeit).

    sed -i -e "s/^timeout=.*/timeout=1/" /boot/grub/menu.lst

    Quote

    Wie kann ich das einfacher machen und vor allem wie kann ich den Eintrag hinzufühgen ohne bestehende cron einträge zu löschen (das passiert mit dieser lösung nämlich)

    { crontab -l ; echo "0 7 * * * /sbin/shutdown –r now" ; } | crontab -

    Wenn du doppelte Einträge vermeiden willst, verwende | sort | uniq | crontab -

    Wenn du die Reihenfolge nicht ändern willst, musst du vorher mit if grep -q "..." ; then testen.

    Gruß,

    Udo

  • Greywolf:

    ich suche eher eine möglichkeit die sources zeilen in einer variable abzulegen um sie dann einfach in die sources.list zu schreiben. Der Grund: diese Zeilen sollen konfigurierbar sein und der benutzter soll ja nicht das ganze script durchgehen muessen, sondern nur am anfang ein paar settings machen...

    ich hatte sowas probier, aber das funktioniert nicht:

    mysources = 'deb http://ftp2.de.debian.org/debian sarge main non-free contrib
    deb http://security.debian.org/ sarge/updates main contrib non-free
    deb http://www.debian-multimedia.org sarge main
    deb http://e-tobi.net/vdr-experimental sarge base backports addons vdr-multipatch
    deb http://www.heise.de/ct/ftp/projekte/vdr5 updates/'

    echo $mysources >> ./sources.list

  • Quote

    Original von allow
    ich hatte sowas probier, aber das funktioniert nicht:

    mysources = 'deb http://ftp2.de.debian.org/debian sarge main non-free contrib
    deb http://security.debian.org/ sarge/updates main contrib non-free
    deb http://www.debian-multimedia.org sarge main
    deb http://e-tobi.net/vdr-experimental sarge base backports addons vdr-multipatch
    deb http://www.heise.de/ct/ftp/projekte/vdr5 updates/'

    echo $mysources >> ./sources.list

    Funktioniert mit

    Code
    echo "$mysources" >> ./sources.list
  • Greywolf

    hmm, klappt nicht, die sources datei ist leer

    Aber ich haette da nochwas:-))

    wie kann ich aus der ausgabe von

    http://www.kernel.org/kdist/finger_banner

    die aktuelle kernelversion extrahieren? Ich möchte dass die version (aktuelle ist das 2.6.17.4) in einer variable gespeichert wird, damit ich sie im restlichen script verwenden kann...

    anyone?

    Edited once, last by allow (July 10, 2006 at 2:52 PM).

  • Hallo,

    Code
    VER=$(lynx -dump http://www.kernel.org/kdist/finger_banner | awk '/latest stable version/ {printf("%s",$NF);}')

    Oder wget, etc...

    VDR1: Gigabyte GA-M720-US3 (nVidia Corporation MCP78S [GeForce 8200]), Athlon II X2 240, 2GB RAM, Intel 82574L Gigabit, Debian Squeeze, Kernel 2.6.38.3 mit linux-media.tar.bz2 vom 20.04. 10:04, dvbhddevice fb6b1beedb72, VDR-1.7.22 (extension-Patch, 15 Plugins), epgsearch, extrecmenu, ...
    VDR2: Debian Etch, 2.6.21.3, K6-2 400, 192MB, NFS-Root, 466GiB über NFS, 1xNexus 2.1, 1xNova S, VDR-1.4.7
    Server: Debian Squeeze, 2.6.35.7, AMD X2 240e, 4GB, System: Raid1 2x500GB, Aufnahmen: Raid5 4TB + 1x 500GB, 1000MBit LAN
    Episodenlisten für epgsearch, VDRSeriesTimer

  • Quote

    Original von allow
    Greywolf

    hmm, klappt nicht, die sources datei ist leer

    Steht dein Code direkt wie oben in der Datei? Bekommst Du keine Fehlermeldung? Die Leerstellen um das "=" müssen weg, bei mir bekomme ich sonst "bash: mysources: command not found".

  • @qvejoun

    wie geht denn das mit wget? Ich habe nicht rausgefunde wie ich wget dazu bekomme die daten auszugeben statt sie in eine datei zu speichern...

    Habs rausgefunden:

    Code
    VER=$(wget -O - http://www.kernel.org/kdist/finger_banner | awk '/latest stable version/ {printf("%s",$NF);}')

    Edited once, last by allow (July 11, 2006 at 9:31 AM).

  • gibts ein shell commando das wie in dos pause (ware auf tastendruck) wirkt? (klar gibts das, würde mich schwer wundern wenn nicht:-))

    Edited once, last by allow (July 11, 2006 at 7:30 PM).

  • Wie kann ich die versionsnummer aus der /etc/issue datei auslesen?

    /etc/issue

    Code
    c't Debian VDR Distribution 5.0 \n \l

    mein ansatz:

    osfound=$(cat /etc/issue | awk '/c't Debian VDR Distribution / {printf("%s");}')


    aber so genau hab ich das noch nicht verstanden... ich möchte das osfound entweder 5.0 oder 4.5 enthält (je nach inhalt von /etc/issue)

    Edited once, last by allow (July 13, 2006 at 5:39 PM).

  • Quote

    Original von allow
    Wie kann ich die versionsnummer aus der /etc/issue datei auslesen?

    /etc/issue

    Code
    c't Debian VDR Distribution 5.0 \n \l

    Sofern die Datei bzw. diese Zeile bis auf die Nummer immer identisch ist:

    Code
    osfound=$(awk '/VDR/ {print $5}' /etc/issue)

    Gibt es nicht eine /etc/debian_version oder ähnliches, die nur für genau diese Versionsnummer gedacht ist? /etc/issue ist IMHO keine "zuverlässige" Quelle für solche Daten ...

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!