Bash: Unterschied zwischen den Versionen

Aus Mediawiki Ferdinand Gruber
Zur Navigation springen Zur Suche springen
 
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
== 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 <tt> $# $* $@ </tt> zur Verfügung: <tt>. 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 ==
 
== 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 6: 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 ==
 
  host grfe.dyndns.org | awk '/has address/ { print $4; exit}'
 
  host grfe.dyndns.org | awk '/has address/ { print $4; exit}'
Zeile 22: Zeile 56:
 
Die zwei Minuszeichen bedeuten, dass hier die Parameterliste für das Kommando '''bash''' zu Ende ist.
 
Die zwei Minuszeichen bedeuten, dass hier die Parameterliste für das Kommando '''bash''' zu Ende ist.
 
== Shebang ==
 
== Shebang ==
Der Shebang legt fest, mit welcher Shell das Script interpretiert werden soll
+
Der Shebang legt fest, mit welcher Shell das Script interpretiert werden soll.
 
  #!/bin/bash
 
  #!/bin/bash
Der Shebang muss in der ersten Zeile des Scriptes stehen.
+
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:

Bash redirection