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.

  • 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
  • Zitat

    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 }


    Zitat

    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
  • Zitat

    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"

  • Zitat

    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


    Zitat

    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


  • 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?

  • 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

  • Zitat

    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);}')
  • 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)

  • Zitat

    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 ...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!