erstes BashScript und Fragen

  • Guten Abend zusammen,

    ich habe mein erstes BashScript erstellt, welches nun hoffentlich jeden Sonntag um 01:10 Uhr gestartet wird:

    Code
    10 1    * * 0   root    /root/scripts/update.sh >> /var/log/sytem_update.log

    Folgenden Inhalt hat mein BashScript:

    Folgende Fragen habe ich:

    1. Wie kann ich die Datumsangabe in einer Variable speichern, die sich selbst aktualisiert, sodass immer der aktuelle Zeitstempel am Anfang gezeigt wird?
    2. Ich würde gern alle "sudo apt-get" Ausgaben eingerückt anzeigen. Wie mache ich das am besten?

    Danke und viele Grüße
    Toni

  • Ich muss dir energisch davon abraten Blind ein upgrade der Pakete vorzunehmen. Sowas ist milde gesagt dämlich und kann ziemlich übel enden, wenn dabei zB Fehler auftreten oder weitere Pakete installiert werden um Abhängigkeiten zu erfüllen usw. Man neigt dann ganz schnell dazu das nicht mehr weiter zu beachten und zu glauben man sei up2date.

    Das höchste der Gefühle ist eine Simulation durchzuführen und sofern er etwas updaten wollen würde, eine Benachrichtigung an den SystemAdmin zu schicken. So wird das selbst heutzutage noch immer gemacht. Man kann dazu auch zB 'munin' zur Hilfe nehmen - aber niemals werden Pakete unbeobachtet automatisch aktualisiert!


    Wenn du das Datum mit Uhrzeit in eine Variable schreibst, ist diese in jeder echo Ausgabe identisch, also auch noch dem durch Befehle wie apt-get update Zeit verstrichen ist. Du hast aber auch zwei " zuviel in den echo's. Am Anfang und am Ende, mehr brauchst Du nicht.

    Wenn du das Script mit sudo ausführst, werden auch alle darin befindlichen Befehle mit root Rechten ausgeführt. Also ist jedes weitere sudo im Script überflüssig.

    Ausgaben formatieren macht man für gewöhnlich mit printf

  • Code
    datum=`date +'%Y-%m-%d %T'`
    echo ${datum}

    Bei der Bash Variablen immer mit ${name} schreiben, da man nur so der Bash sauber sagen kann, war die Variable ist.

    Computer ..... grrrrrr

    Einmal editiert, zuletzt von Rasp-Berlin (29. Oktober 2015 um 09:07)

  • ${name} brauch man nur in wenigen Fällen, wie zum Beispiel zur Verwendung von Arrays oder Expansions
    man muss es aber gerade hier nicht so schreiben, es reicht $datum

    In deinem Beispiel verwendest du zum Beispiel ${a}b um zwar die Variable $a einzufügen aber dann den Buchstaben b direkt anzuhängen. Man kann das aber auch so machen: $a\b ...Also Escapen. Man kann auch direkt $a$b verwenden und muss nicht ${a}${b} machen.
    Es gibt also auch hier keine Pflicht unbedingt ${ } verwenden zu müssen.

    Der TE hat zudem bereits now="$(date +'%Y-%m-%d %T')" in Verwendung. $( ) sollte man bevorzugen da das eindeutiger ist und bei der now="`date +'%Y-%m-%d %T'`" Schreibweise schneller Fehler passieren, wie zum Beispiel das ´ oder ' anstatt ` verwendet wird, aber nur letzteres würde funktionieren. Wie ich aber auch schon anmerkte brauch man die " in diesem Fall nicht (eigentlich werden die auch nur selten benötigt)

  • In 7 Jahren als reiner Linux-User (Nur ein Windows auf dem Spiele laufen, sonst nix) hatte ich noch nie den Fall, dass ein Update mir das System kaputt gemacht hat. Diese Probleme gab es früher mal... das war aber vor meiner Linux-Zeit...
    Anders ist das natürlich, wenn man wild Repositories hinzufügt die schlecht gewartet werden! Damit hatte ich auch schon Probleme!

  • Was ist jetzt die Quintessenz für mich? Soll ich also die Updates nicht per ShellScript ausführen?

  • Es mag auf den ersten Blick praktisch zu sein immer automatisch zu upgraden. Es gibt aber immer wieder Situationen wo human interaction required ist.

    Ich halte es deshalb so dass ich einmal pro Monat meine 3 Raspis manuell durchgehe und upgrade. Wenn Du 100te hast ist das natürlich nicht mehr praktikabel :lol:

    So unpraktisch es ist auf einer deutschen Tastatur die { und } einzugeben ... es macht den bash Code und die Erkennbarkeit der Variablen leichter wenn man sie immer benutzt. Abhilfe schafft es eine englische Tastatur zu benutzen :shy:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!