{{tag> bash scripting}} ====== Einfache Shell Scripte ====== 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. ==== Variablen ==== 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, ... ==== Bedingte Anweisungen ==== Grundstruktur: if [Bedingung]; then else 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 ==== Schleifen ==== Beispiel, das die Buchstaben "a,b,c,d,e" ausdruckt: for z in a b c d e do echo $z done ==== Numerische Berechnungen ==== 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" [[http://linuxint.com/DOCS/Linux_Docs/openbook_shell/shell_004_001.htm#RxxKap00400104004DAD1F01D1BE|Tutorial zu bc und Berechnungen in der bash]] ==== Pipes, Verkettungen, Umleitungen u.ä. ==== ; # Befehle hintereinander ausführen (wenn sie in einer Zeile stehen) && # Befehlsverkettung: Befehl-2 wird nur ausgeführt, wenn der erste Befehl korrekt/fehlerfrei durchgeführt wurde || # Befehlsverkettung: Befehl-2 wird nur ausgeführt, wenn der erste Befehl nicht korrekt/fehlerfrei durchgeführt wurde >> /root/log.txt # Ausgabe des Befehls-1 wird in die Datei log.txt geschrieben | # Pipe, die (Text-) Ausgabe des Befehls-1 wird an Befehl-2 übergeben & # Der Befehl wird im Hintergund abgearbeitet, das Script läuft ohne Warten weiter