Bash-Grundlagen fuer Sysadmins

Wer regelmäßig auf Linux-Servern arbeitet kommt an Bash-Scripts nicht vorbei.
Hier die Grundlagen die man kennen muss um vernünftige Scripts zu schreiben.

Shebang und Exit-Codes

Jedes Script beginnt mit der Shebang-Zeile.

#!/bin/bash
set -e

set -e bricht das Script ab sobald ein Befehl fehlschlägt. Ohne das läuft es einfach weiter, was zu schwer zu debuggenden Fehlern führt.

Exit-Codes: 0 bedeutet Erfolg, alles andere ist ein Fehler.

if ! command -v nginx &>/dev/null; then
    echo "nginx ist nicht installiert"
    exit 1
fi

Variablen

name="wert"
echo "$name"

Immer in Anführungszeichen damit Leerzeichen keine Probleme machen.

Befehlsausgabe in Variable speichern.

datum=$(date +%Y-%m-%d)
anzahl=$(ls /var/www | wc -l)

Bedingungen

if [ -f "/etc/nginx/nginx.conf" ]; then
    echo "nginx.conf existiert"
fi

if [ "$1" = "" ]; then
    echo "Kein Argument übergeben"
    exit 1
fi

-f prüft ob eine Datei existiert, -d für Verzeichnisse, -z ob ein String leer ist.

Schleifen

Über Dateien iterieren.

for file in /var/log/*.log; do
    echo "Verarbeite: $file"
done

While-Schleife.

while IFS= read -r line; do
    echo "$line"
done < datei.txt

Funktionen

log() {
    echo "[$(date +%H:%M:%S)] $1"
}

log "Script gestartet"
log "Fertig"

Argumente

$1, $2 usw. sind die übergebenen Argumente, $# die Anzahl, $@ alle zusammen.

if [ "$#" -lt 1 ]; then
    echo "Verwendung: $0 <pfad>"
    exit 1
fi

pfad="$1"