# Produktive Bash-Scripts Der Beitrag liefert zu Beginn eine minimale Einführung in die Nutzung von Bash-Scripts, danach folgen praktische Beispiele. Wer mehr zum Thema Programmierung mit Bash erfahren möchte, dem sei das Buch „Shell-Programmierung“ empfohlen, das Sie online kostenlos unter https://openbook.rheinwerk-verlag.de/shell_programmierung/ lesen können. Die gedruckte Version des Buches ist für 44,90 Euro erhältlich (https://m6u.de/SHPROG). ## Die Scriptdateien **backup.bash:** Einfaches Backup-Script mit rsync. **backup_ex.bash:** Dieses erweiterte Script ist für die Sicherung ausgewählter Ordner gedacht. **convert_images.bash:** Mehrere Bilddateien konvertieren (Typ und Größe ändern) **mk_slideshow.bash:** Wenn in einer Slideshow Bildübergänge sowie eine Musikuntermalung gewünscht sind und das Video auf eine übliche Größe skaliert werden soll, wird die ffmpeg-Befehlszeile umfangreich, weshalb Sie sich diese komfortabler mit dem Script „mk_slideshow.bash“ erstellen lässt (https://m6u.de/BASHS). Passen Sie im Script den Ein- und Ausgabeordner an, hinter „MP3“ gehört der Pfad zu einer Audio-Datei. Ist die Variable leer, wird keine Audiospur erzeugt. **extr**: Das Script „extr“ gestaltet das Entpacken bequemer. Die benötigten Archivprogramme müssen auf dem Rechner installiert sein, etwa die Pakete „7zip“ und „unrar“. Sie können alternativ die Funktion „extr()“ aus dem Script in die Datei „.bashrc“ kopieren und genauso wie oben beschrieben aufrufen. **smart_fritz_terminal.bash:** Unser Script „smart_fritz_terminal.bash“ kann die verbundenen DECT-Schalter ermitteln und Steckdosen ein- und ausschalten. Außerdem kann es die Anrufliste herunterladen und die externe IP-Adresse anzeigen. Bevor Sie das Script nutzen, passen Sie den kommentierten Konfigurationsabschnitt an. **demo_dialog.bash:** Das Tool Dialog ermöglicht einfache grafische Benutzeroberflächen im Terminal. Sollte es nicht bereits vorhanden sein, installieren Sie das Paket „dialog“. Das Script „demo_dialog.bash“ zeigt ein Beispiel. Es stellt eine Frage, die Sie mit „Ja“ oder „Nein“ beantworten (siehe Abbildung). Das Ergebnis wird über notify-send als Benachrichtigung ausgegeben. ## Befehlszeilen aus der LinuxWelt 2025-03 **Bash-Basics** `#!/usr/bin/env bash` `chmod +x [Dateiname]` `./[Dateiname]` `~/[Ordner]/[Dateiname]` `bash [Dateiname]` `source ~/.profile` `help cd` `VARIABLE="Wert"` `echo $VARIABLE` ``` if [ -n "$1" ]; then echo $1 else echo "Keine Option angegeben" fi ``` **Backups mit Rsync erstellen*** `rsync -auP /home/sepp /media/sepp/usb/backup` ``` #!/usr/bin/env bash date=`date "+%Y-%m-%dT%H_%M_%S"` SOURCEDIR=$HOME/Dokumente BACKUPDIR=/media/$USER/usb/backup rsync -avP --log-file=$HOME/rsync.log --link-dest=$BACKUPDIR/current $SOURCEDIR $BACKUPDIR/back-$date ln -nsf back-$date $BACKUPDIR/current ``` `diff --brief --recursive $HOME/Dokumente /media/$USER/usb/backup/[Backup-Ordner]/Dokumente` **Backup-Script mit mehr Funktionen** `sudo ./backup_ex.bash -s "/" -t "/Backup" -n "local-data"` ``` + /var/ + /var/www/ - /var/* ``` **Bilder per Script konvertieren** `sudo apt install imagemagick-6.q16` `convert Bild.png Bild.jpg` `convert Bild.jpg -resize 50% Bild-klein.jpg` ``` #!/usr/bin/env bash IN=~/Bilder/Urlaub OUT=~/Bilder/Urlaub/klein for f in $IN/*.jpg do echo "Verarbeite $f" filename=$(basename -- "$f") filename="${filename%.*}" /usr/bin/convert -resize 50% $f $OUT/$filename.jpg done ``` **Diashow aus Bilddateien erstellen** `sudo apt install ffmpeg ` `ffmpeg -framerate 1/3 -i img%03d.jpg -c:v libx264 -r 25 -pix_fmt yuv420p output.mp4` **Universeller Entpacker** `extr Archiv.tar.bz2` `extr Archiv.7z` **Schalten mit der Fritzbox** `smart_fritz_terminal.bash 1 on` `smart_fritz_terminal.bash 1 on`