Bash funktion: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (9 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 13: | Zeile 13: | ||
*Ebenso verdeckt ein Funktionsname ein gleichnamiges Kommando. (ausser man benutzt das Kommando builtin) | *Ebenso verdeckt ein Funktionsname ein gleichnamiges Kommando. (ausser man benutzt das Kommando builtin) | ||
*Die Funktion muss vor ihrer Verwendung definiert sein. | *Die Funktion muss vor ihrer Verwendung definiert sein. | ||
| − | * | + | *Eine Funktion läuft in der aktuellen Umgebung, d.h. alle Variablen der Umgebung sind sichtbar und alle Variablen, die in der Funktion definiert wurden, sind auch außerhalb sichtbar |
*Wird eine Funktion mittels "exit" verlassen, wird auch der rufende Prozess beendet | *Wird eine Funktion mittels "exit" verlassen, wird auch der rufende Prozess beendet | ||
*Der Rückgabewert einer Funktion ist der Rückgabewert des letzten in ihr gestarteten Kommandos | *Der Rückgabewert einer Funktion ist der Rückgabewert des letzten in ihr gestarteten Kommandos | ||
| Zeile 20: | Zeile 20: | ||
==Einfache Funktion== | ==Einfache Funktion== | ||
| − | <syntaxhighlight> | + | <syntaxhighlight lang=bash> |
#!/bin/bash | #!/bin/bash | ||
function sux () | function sux () | ||
| Zeile 28: | Zeile 28: | ||
sux | sux | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | =Variablen= | ||
| + | *Man kann Funktionen Stellungsparameter übergeben $1 $2 $3 usw.. | ||
| + | *Man kann in Funktionen Variablen als lokal definieren, sie gelten dann nur in der Funktion | ||
| + | *Der Rückgabewert der Funktion ist einfach eine Ausgabe mit echo. | ||
| + | |||
==Funktionen mit Parameter== | ==Funktionen mit Parameter== | ||
| − | <syntaxhighlight> | + | <syntaxhighlight lang=bash> |
#!/bin/bash | #!/bin/bash | ||
FAILED=$(echo -e "\e[31mfailed\e[39m") | FAILED=$(echo -e "\e[31mfailed\e[39m") | ||
| Zeile 35: | Zeile 40: | ||
function status() | function status() | ||
{ | { | ||
| + | local bezeichner=$1 | ||
| + | local fqdn=$2 | ||
| + | |||
if ping -w 1 -c 1 -q $2 > /dev/null | if ping -w 1 -c 1 -q $2 > /dev/null | ||
then | then | ||
| − | echo "$ | + | echo "$bezeichner $fqdn $OK" |
else | else | ||
| − | echo "$ | + | echo "$bezeichner $fqdn $FAILED" |
fi | fi | ||
} | } | ||
function portstatus() | function portstatus() | ||
{ | { | ||
| + | local p_bezeichner=$1 | ||
| + | local p_fqdn=$2 | ||
| + | local p_port=$3 | ||
if nc -w 1 -z $2 $3 > /dev/null | if nc -w 1 -z $2 $3 > /dev/null | ||
then | then | ||
| − | echo "$ | + | echo "$p_bezeichner ip: $2 port: $p_port $OK " |
else | else | ||
| − | echo "$ | + | echo "$p_bezeichner ip: $p_fqdn port: $p_port $FAILED " |
fi | fi | ||
} | } | ||
| Zeile 54: | Zeile 65: | ||
portstatus google-http www.google.de 80 | portstatus google-http www.google.de 80 | ||
portstatus google-https www.google.de 443 | portstatus google-https www.google.de 443 | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | ==Parameter Rückgabe== | ||
| + | ===Skalare Rückgabe=== | ||
| + | <syntaxhighlight lang=bash> | ||
| + | #!/bin/bash | ||
| + | add() { | ||
| + | echo $(($1+$2)) | ||
| + | } | ||
| + | |||
| + | erg=$(add 3 4) | ||
| + | echo $erg | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | ===Array Rückgabe=== | ||
| + | <syntaxhighlight lang=bash> | ||
| + | |||
| + | #!/bin/bash | ||
| + | |||
| + | # Funktion, die ein Array erstellt und zurückgibt | ||
| + | create_array() { | ||
| + | local my_array=("Element 1" "Element 2" "Element 3") | ||
| + | echo "${my_array[@]}" | ||
| + | } | ||
| + | |||
| + | # Funktionsaufruf und Rückgabe des Arrays | ||
| + | result=($(create_array)) | ||
| + | |||
| + | # Ausgabe der Array-Elemente | ||
| + | for element in "${result[@]}"; do | ||
| + | echo "$element" | ||
| + | done | ||
| + | </syntaxhighlight> | ||
| + | |||
==Rekursive Funktion== | ==Rekursive Funktion== | ||
| − | <syntaxhighlight> | + | <syntaxhighlight lang=bash> |
#!/bin/bash | #!/bin/bash | ||
fac() | fac() | ||
| Zeile 83: | Zeile 127: | ||
*Ergebnis ist 6 und wird ausgegeben. | *Ergebnis ist 6 und wird ausgegeben. | ||
*Ende der Rekursion | *Ende der Rekursion | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
=Backup Skript= | =Backup Skript= | ||
<syntaxhighlight lang=bash> | <syntaxhighlight lang=bash> | ||
| Zeile 166: | Zeile 162: | ||
;; | ;; | ||
| − | + | esac | |
</syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
| + | = Aufgaben = | ||
| + | |||
| + | * [[Aufgaben Bash function]] | ||
Aktuelle Version vom 8. Juni 2023, 04:42 Uhr
Was ist das?
- Die "function" in Bash ermöglicht die Definition und Verwendung von benutzerdefinierten Funktionen, um wiederkehrende Codeblöcke zu strukturieren und wiederverwendbaren Code zu erstellen.
- Die Syntax für die Definition einer Funktion besteht aus dem Schlüsselwort "function", gefolgt von einem Funktionsnamen und einer Klammerpaarung.
- Der Codeblock der Funktion wird zwischen den geschweiften Klammern platziert.
- Nach der Definition kann die Funktion durch Aufruf ihres Namens mit optionalen Argumenten verwendet werden.
- Die Funktion kann auch Rückgabewerte liefern, indem sie das Schlüsselwort "return" gefolgt von einem Wert verwendet.
- Funktionen ermöglichen eine modulare Strukturierung von Shell-Skripten und erleichtern die Wiederverwendung von Code sowie die Verbesserung der Lesbarkeit und Wartbarkeit von Skripten.).
Eine Funktion wird wie folgt definiert
Format: [function] Funktionsname() { Kommando; [Kommando;] }
Bei der Verwendung von Funktionen sind einige Regeln zu befolgen
- Deckt sich der Name der Funktion mit einem builtin-Kommando, wird immer die Funktion ausgeführt und niemals das Kommando.
- Ebenso verdeckt ein Funktionsname ein gleichnamiges Kommando. (ausser man benutzt das Kommando builtin)
- Die Funktion muss vor ihrer Verwendung definiert sein.
- Eine Funktion läuft in der aktuellen Umgebung, d.h. alle Variablen der Umgebung sind sichtbar und alle Variablen, die in der Funktion definiert wurden, sind auch außerhalb sichtbar
- Wird eine Funktion mittels "exit" verlassen, wird auch der rufende Prozess beendet
- Der Rückgabewert einer Funktion ist der Rückgabewert des letzten in ihr gestarteten Kommandos
- Funktionen sind nur in der Shell ihrer Definition bekannt
- return bewirkt das Verlassen der Funktion, auch mit return kann ein Rückgabewert mitgegeben werden
Einfache Funktion
#!/bin/bash
function sux ()
{
echo "ich bin eine suxer funktion"
}
sux
Variablen
- Man kann Funktionen Stellungsparameter übergeben $1 $2 $3 usw..
- Man kann in Funktionen Variablen als lokal definieren, sie gelten dann nur in der Funktion
- Der Rückgabewert der Funktion ist einfach eine Ausgabe mit echo.
Funktionen mit Parameter
#!/bin/bash
FAILED=$(echo -e "\e[31mfailed\e[39m")
OK=$(echo -e "\e[32mok\e[39m")
function status()
{
local bezeichner=$1
local fqdn=$2
if ping -w 1 -c 1 -q $2 > /dev/null
then
echo "$bezeichner $fqdn $OK"
else
echo "$bezeichner $fqdn $FAILED"
fi
}
function portstatus()
{
local p_bezeichner=$1
local p_fqdn=$2
local p_port=$3
if nc -w 1 -z $2 $3 > /dev/null
then
echo "$p_bezeichner ip: $2 port: $p_port $OK "
else
echo "$p_bezeichner ip: $p_fqdn port: $p_port $FAILED "
fi
}
status google www.google.de
portstatus google-http www.google.de 80
portstatus google-https www.google.de 443
Parameter Rückgabe
Skalare Rückgabe
#!/bin/bash
add() {
echo $(($1+$2))
}
erg=$(add 3 4)
echo $erg
Array Rückgabe
#!/bin/bash
# Funktion, die ein Array erstellt und zurückgibt
create_array() {
local my_array=("Element 1" "Element 2" "Element 3")
echo "${my_array[@]}"
}
# Funktionsaufruf und Rückgabe des Arrays
result=($(create_array))
# Ausgabe der Array-Elemente
for element in "${result[@]}"; do
echo "$element"
done
Rekursive Funktion
#!/bin/bash
fac()
{
if [ $1 -le 1 ]
then
echo 1
else
ERG=$(fac $(($1-1)))
echo $(($1 * $ERG))
fi
}
fac $1
- Erklärung
- Funktion wird mit dem Wert 3 aufgerufen. (Aufruf 1)
- 3 ist grösser als 1
- Funktion wird mit dem Wert 2 nochmal aufgerufen. (Aufruf 2)
- 2 ist grösser als 1
- Funktion wird mit dem Wert 1 nochmal aufgerufen. (Aufruf 3)
- 1 ist kleiner oder gleich 1
- Der Wert 1 wird in die Variable ERG in Aufruf 2 geschrieben.
- Aufruf 2 wurde mit dem Wert 2 aufgerufen dieser wird mit dem ERG also 1 multipliziert.
- Der Wert 2 wird an den Aufruf 1 als Ergebnis zurückgegeben. ERG=2
- In Aufruf eins war der Wert 3 dieser wird mit ERG = 2 multipliziert.
- Ergebnis ist 6 und wird ausgegeben.
- Ende der Rekursion
Backup Skript
#!/bin/bash
TODO=$1
HOST=$2
DIR=$3
DAY=$(date +%C%y-%m-%d)
BACKUPDIR=/backup
FDIR=$(echo $DIR | tr "/" "-")
#DEST=$HOST-$FDIR-$DAY.tgz
DEST=$HOST-$FDIR.tgz
function backup()
{
ssh root@$HOST tar -cvzf - $DIR > $DEST
}
function restore()
{
cat $DEST | ssh root@$HOST tar -C / -xvzf -
}
cd $BACKUPDIR
case $1 in
backup)
echo backup HOST: $HOST and DIR: $DIR
backup
;;
restore)
echo restore HOST: $HOST and DIR: $DIR
restore
;;
esac