Sihe auch → http://www.linux-services.org/shell/shell.html
Jedes selbstständige Shell-Script beginnt mit dem zugehörigen Interpreter in der ersten Zeile (nach den beiden shebang-Zeichen „#!“):
#! /bin/sh
Shell-Scripte müssen per chmod auf ausführbar gesetzt sein.
Variable zuweisen
text = "Hallo"
Variable verwenden, in doppelten Anführungszeichen wird die Variable durch ihren Inhalt ersetzt.
echo "$text"
Text ausdrucken, ohne die Variable zu ersetzen:
echo '$text'
Die Übergabeparameter an das Script sind in den folgenden Variablen abgelegt:
$1, $2, $3, ...
Grundstruktur:
if [Bedingung]; then <Befehlsblock> else <Befehlsblock> fi
Bedingungen:
["$text" = "Hallo"] # Test mit Variable $text ["$text" != "Hallo"] # Verneinung der Bedingung [-f "/etc/test"] # Test auf Existenz einer Datei [-d "/etc/test"] # Test auf Existenz einer Datei oder Verzeichnisses [$Zaehler -le 10] # Bedingung für kleiner/gleich (less+equal) # bei Zahlen folgende Vergleiche verwenden: -ne -eq -lt -gt -le -ge
if eval "ping -c1 10.16.1.1 > /dev/null" then echo "server läuft" fi
UND („&&“) und ODER („||“) Verknüpfungen:
if [ "$text" == "Hallo" ] && [ "$user" == "Otto" ]; then echo "User und Text sind richtig"; fi
Beispiel, das die Buchstaben „a,b,c,d,e“ ausdruckt:
for z in a b c d e do echo $z done
anzahl="10" anzahl=$(( $anzahl-3+(30*5)/7 )) echo "$anzahl"
Die doppelten runden Klammern schließen einen Rechenausdruck ein. Es werden damit nur Berechnungen mit Integer-Zahlen ausgeführt.
Weitere Möglichkeit: Rechnen mit dem Befehl „bc“ und die here-string-Pipe-Notation mit dreifachem „<“, rechnet mit Dezimalzahlen. Die Anzahl der Nachkommastellen kann mit „scale=n“ festgelegt werden. Mathematische Funktionen wie z.B. Sinus sind mit der Library-Option „bc -l“ verfügbar.
a=6 b=5.77 e=`bc <<< "($a+$b-0.5)"` echo "Ergebnis: $e"
<Befehl1> ; <Befehl2> # Befehle hintereinander ausführen (wenn sie in einer Zeile stehen) <Befehl1> && <Befehl2> # Befehlsverkettung: Befehl-2 wird nur ausgeführt, wenn der erste Befehl korrekt/fehlerfrei durchgeführt wurde <Befehl1> || <Befehl2> # Befehlsverkettung: Befehl-2 wird nur ausgeführt, wenn der erste Befehl nicht korrekt/fehlerfrei durchgeführt wurde <Befehl1> >> /root/log.txt # Ausgabe des Befehls-1 wird in die Datei log.txt geschrieben <Befehl1> | <Befehl2> # Pipe, die (Text-) Ausgabe des Befehls-1 wird an Befehl-2 übergeben <Befehl1> & # Der Befehl wird im Hintergund abgearbeitet, das Script läuft ohne Warten weiter