Bash: Unterschied zwischen den Versionen
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
: Meist verwendet man Funktionen OHNE Parameter. Alle Variablen des Scripts gelten auch innerhalb der Funktion. | : Meist verwendet man Funktionen OHNE Parameter. Alle Variablen des Scripts gelten auch innerhalb der Funktion. | ||
=== Funktion mit Parametern === | === Funktion mit Parametern === | ||
− | Eine solche Funktion wird aufgerufen wie ein Skript auf der Kommandozeile, d.h. die Parameter werden durch Leerzeichen getrennt und stehen innerhalb der Funktion mit den | + | Eine solche Funktion wird aufgerufen wie ein Skript auf der Kommandozeile, d.h. die Parameter werden durch Leerzeichen getrennt und stehen innerhalb der Funktion mit den Variablen <tt> $# $* $@ </tt> zur Verfügung: <tt>. Die Parameter werden also nicht per Variablenname übergeben sondern als Positionsparameter. |
#Deklaration | #Deklaration | ||
function foo () { | function foo () { | ||
Zeile 16: | Zeile 16: | ||
== Variablen Zuweisung == | == Variablen Zuweisung == | ||
+ | === Wert zu einer Variablen hinzufügen === | ||
Zu einer bestehenden Variablen etwas hinzufügen | Zu einer bestehenden Variablen etwas hinzufügen | ||
var="Hello" | var="Hello" | ||
Zeile 22: | Zeile 23: | ||
echo $var | echo $var | ||
Hello world | Hello world | ||
+ | |||
+ | === Dynamische Variablen === | ||
+ | Den Inhalt einer Variablen als Name einer anderen Variablen verwenden | ||
+ | : Das Beispiel-Script wertet einen Script-Eingabeparameter der folgenden Art aus | ||
+ | foo=blabla | ||
+ | Es wird eine Variable <tt>$foo</tt> erzeugt, die den Wert <tt>'blabla!</tt> enthält. | ||
+ | #!/bin/bash | ||
+ | if [ $# -eq 0 ] ; then | ||
+ | echo Aufruf: script.sh "foo=blabla" | ||
+ | exit | ||
+ | fi | ||
+ | |||
+ | key=$(echo $1 | cut -d "=" -f "1") | ||
+ | val=$(echo $1 | cut -d "=" -f "2") | ||
+ | declare $key=$val | ||
+ | echo "Die Variable \$foo hat den Wert '$foo'" | ||
== IP Adresse aus Domainname extrahieren == | == IP Adresse aus Domainname extrahieren == | ||
Zeile 42: | Zeile 59: | ||
#!/bin/bash | #!/bin/bash | ||
Der Shebang muss in der ersten Zeile des Scriptes stehen, also auch vor irgendwelchen Kommentaren und Beschreibungen | Der Shebang muss in der ersten Zeile des Scriptes stehen, also auch vor irgendwelchen Kommentaren und Beschreibungen | ||
+ | |||
+ | == Umleitung der Ausgabe == | ||
+ | Hier findet man eine übersichtliche Erklärung der verschiedenen Möglichkeiten, die Ausgabe eines befehls umzuleiten: | ||
+ | |||
+ | [https://www.thomas-krenn.com/de/wiki/Bash_stdout_und_stderr_umleiten#Bash_redirection Bash redirection] |
Aktuelle Version vom 1. November 2024, 07:25 Uhr
Funktionen
Eine Funktion muss im Code VOR dem Aufruf stehen.
- Meist verwendet man Funktionen OHNE Parameter. Alle Variablen des Scripts gelten auch innerhalb der Funktion.
Funktion mit Parametern
Eine solche Funktion wird aufgerufen wie ein Skript auf der Kommandozeile, d.h. die Parameter werden durch Leerzeichen getrennt und stehen innerhalb der Funktion mit den Variablen $# $* $@ zur Verfügung: . Die Parameter werden also nicht per Variablenname übergeben sondern als Positionsparameter.
#Deklaration function foo () { echo Parameter: $@ } #Aufruf foo(-a -p --dry-run)
#Ausgabe: Parameter: -a -p --dry-run
Man kann also innerhalb einer Funktion nicht direkt auf die Aufrufparameter des Scripts, in welchem die Funktion verwendet wird, zugreifen.
Variablen Zuweisung
Wert zu einer Variablen hinzufügen
Zu einer bestehenden Variablen etwas hinzufügen
var="Hello" var+=" world"
Ausgabe
echo $var Hello world
Dynamische Variablen
Den Inhalt einer Variablen als Name einer anderen Variablen verwenden
- Das Beispiel-Script wertet einen Script-Eingabeparameter der folgenden Art aus
foo=blabla
Es wird eine Variable $foo erzeugt, die den Wert 'blabla! enthält.
#!/bin/bash if [ $# -eq 0 ] ; then echo Aufruf: script.sh "foo=blabla" exit fi key=$(echo $1 | cut -d "=" -f "1") val=$(echo $1 | cut -d "=" -f "2") declare $key=$val echo "Die Variable \$foo hat den Wert '$foo'"
IP Adresse aus Domainname extrahieren
host grfe.dyndns.org | awk '/has address/ { print $4; exit}' # Beispielausgabe: 91.114.189.118
Rechnungen durchführen
a=1 let c=$a+5 echo $c
Ausgabe:
6
Skript über SSH ausführen
ssh <host> 'bash -s --' < irgendein_script.sh parameter_1 parameter_2 ...
Das Skript ist lokal gespeichert, wird aber remote über SSH ausgeführt.
Die zwei Minuszeichen bedeuten, dass hier die Parameterliste für das Kommando bash zu Ende ist.
Shebang
Der Shebang legt fest, mit welcher Shell das Script interpretiert werden soll.
#!/bin/bash
Der Shebang muss in der ersten Zeile des Scriptes stehen, also auch vor irgendwelchen Kommentaren und Beschreibungen
Umleitung der Ausgabe
Hier findet man eine übersichtliche Erklärung der verschiedenen Möglichkeiten, die Ausgabe eines befehls umzuleiten: