Aufzucht und Hege von Shell-Scripts: Stil

Was sollte man beim Schreiben eines Shell-Scripts beachten?

Das Wichtigste: Die Programmstruktur sichtbar machen, also einrücken, ab und zu mal eine Leerzeile lassen, um logisch zusammenhängende Blöcke zu markieren. WIE Ihr z. B. das Einrücken konkret umsetzt (ob Ihr öffnende Klammern hinten oder in die nächste Zeile setzt, ob Ihr mit Leerzeichen oder Tabulator einrückt, wie groß die Einrückung ist, ...), ist meiner Meinung nach Geschmackssache, wichtig ist nur, DASS es geschieht.

  # schlechter Stil, Struktur nicht erkennbar, Fehler "vorprogrammiert"
  if [ $a = "A" ]
  then
  if [ $b = "B" ]
  then
  c=C
  elif [$b = "X" ]
  then
  c=D
  else
  c=E
  fi
  elif [ $d = "D" ]
  then
  if [ $e = "E" ]
  then
  c=W
  fi
  fi

  # mit Strukturierung, Variante 1
  if [ $a = "A" ]
  then
    if [ $b = "B" ]
    then
      c=C
    elif [$b = "X" ]
    then
      c=D
    else
      c=E
    fi
  elif [ $d = "D" ]
  then
    if [ $e = "E" ]
    then
      c=W
    fi
  fi

  # mit Strukturierung, Variante 2
  if [ $a = "A" ]; then
      if [ $b = "B" ]; then
          c=C
      elif [$b = "X" ]; then
          c=D
      else
          c=E
      fi
  elif [ $d = "D" ]; then
      if [ $e = "E" ]; then
          c=W
      fi
  fi

Kommentieren: Notiert, was der Code-Abschnitt macht. Nicht so: # Jetzt Dateien kopieren, wenn in der nächsten Zeile ein cp steht - das sieht jeder. Aber schreibt hin, WARUM das Script jetzt so und nicht anders arbeitet. Beschreibt komplexere Kommandos (z. B. einen umfangreichen regulären Ausdruck in einem sed) - nicht nur für andere, die Euer Script mal benutzen sollen, sondern vor allem für Euer zukünftiges Ich! Sonst guckt Ihr in 2 Wochen oder in 4 Jahren entsetzt auf das Script und macht Euch einen Knoten ins Hirn beim Versuch, Eure damaligen Gedankengänge nachzuvollziehen. Eigene Erfahrung ;-)

Schreibt an den Anfang des Scripts einen Kommentar, was das Script erledigen soll, wie es aufgerufen wird (welche Kommandozeilenargumente erwartet werden), was das Ergebnis ist, Datum und Grund jeder Änderung. Gewöhnt Euch dabei am besten einen Standard an, den Ihr einheitlich in allen Scripts benutzt.

Gebt dem Script einen sprechenden Namen, vermeidet Namen wie "test" - es verwirrt nur, wenn es ein Systemkommando mit gleichem Namen gibt. Benennt Variablen so, dass man ungefähr ihren Inhalt erkennen kann (nicht so wie oben in dem Beispiel). Wie lang dann die Variablennamen werden, hängt meist vom Spannungsfeld zwischen Eurer Faulheit und der Lesbarkeit des Scripts ab ;-)

Lasst die Codezeilen nicht zu lang werden. Berücksichtigt, dass Andere vielleicht einen anderen Editor verwenden, mit dem das Lesen überlanger Codezeilen zur Qual werden kann. Teilt im Zweifelsfall Kommandos auf oder setzt sie in der nächsten Zeile fort (dabei tut der Backslash am Ende der Zeile gute Dienste). Und spätestens bei der 5. geschachtelten if-Abfrage solltet Ihr darüber nachdenken, ob das nicht mit anderen Mitteln gemacht werden kann.