Shell-Funktionen
Die Linux-Shell ermöglicht es Benutzern, Funktionen zu definieren, die dann in Shell-Skripten frei aufgerufen werden können.
Das Format zum Definieren einer Funktion in der Shell ist wie folgt:
{
action;
[return int;]
}
Hinweis:
- 1. Sie können mitfunction fun()definieren, oder direktfun()ohne Parameter definieren.
- 2. Für den Rückgabewert können Sie explizit hinzufügen:returnreturn. Wenn nichts hinzugefügt wird, wird das Ergebnis des letzten Befehls als Rückgabewert verwendet.returngefolgt von einem numerischen Wertn(0-255).
Das folgende Beispiel definiert eine Funktion und ruft sie auf:
Beispiel
# Autor: Beispiel-Tutorial
# url:www.example.com
demoFun(){
echo "Dies ist meine erste Shell-Funktion!"
}
echo "-----Die Funktion beginnt mit der Ausführung-----"
demoFun
echo "-----Die Ausführung der Funktion ist abgeschlossen-----"
Ausgabeergebnis:
-----函数开始执行----- 这是我的第一个 shell 函数! -----函数执行完毕-----
Im Folgenden wird eine Funktion mit einerreturn-Anweisung definiert:
Beispiel
# Autor: Beispiel-Tutorial
# url:www.example.com
funWithReturn(){
echo "Diese Funktion wird die beiden eingegebenen Zahlen addieren..."
echo "Geben Sie die erste Zahl ein: "
read aNum
echo "Geben Sie die zweite Zahl ein: "
read anotherNum
echo Die beiden Zahlen sind$aNumund$anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "Die Summe der beiden eingegebenen Zahlen ist $? !"
Die Ausgabe ähnelt der folgenden:
这个函数会对输入的两个数字进行相加运算... 输入第一个数字: 1 输入第二个数字: 2 两个数字分别为 1 和 2 ! 输入的两个数字之和为 3 !
Der Rückgabewert der Funktion wird nach dem Aufruf der Funktion über$? ermittelt.
Hinweis:Alle Funktionen müssen vor der Verwendung definiert werden. Das bedeutet, die Funktion muss am Anfang des Skripts stehen, und sie kann erst verwendet werden, wenn der Shell-Interpreter sie zum ersten Mal antrifft. Um eine Funktion aufzurufen, verwenden Sie einfach ihren Funktionsnamen.
Hinweis: returnDie return-Anweisung kann nur eine ganze Zahl zwischen 0 und 255 zurückgeben, und die Summe der beiden eingegebenen Zahlen kann diesen Bereich überschreiten.
Um dieses Problem zu lösen, können Sie die return-Anweisung ändern und direkt echo verwenden, um die Summe auszugeben, anstatt return zu verwenden:
Beispiel
echo "Diese Funktion wird die beiden eingegebenen Zahlen addieren..."
echo "Geben Sie die erste Zahl ein: "
read aNum
echo "Geben Sie die zweite Zahl ein: "
read anotherNum
sum=$(($aNum + $anotherNum))
echo Die beiden Zahlen sind$aNumund$anotherNum !"
echo $sum # Die Summe der beiden Zahlen ausgeben
}
Funktionsparameter
In Shell können Sie beim Aufrufen einer Funktion Parameter an sie übergeben. Innerhalb des Funktionskörpers werden die Parameterwerte in der Form $n abgerufen. Zum Beispiel steht $1 für den ersten Parameter, $2 für den zweiten Parameter...
Beispiel für eine Funktion mit Parametern:
Beispiel
# Autor: Beispiel-Tutorial
# url:www.example.com
funWithParam(){
echo "Der erste Parameter ist $1 !"
echo "Der zweite Parameter ist $2 !"
echo "Der zehnte Parameter ist $10 !"
echo Der zehnte Parameter ist${10} !"
echo Der elfte Parameter ist${11} !"
echo "Die Gesamtzahl der Parameter ist $# !"
echo "Alle Parameter als Zeichenfolge ausgeben $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
Ausgabeergebnis:
第一个参数为 1 ! 第二个参数为 2 ! 第十个参数为 10 ! 第十个参数为 34 ! 第十一个参数为 73 ! 参数总数有 11 个! 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
Beachten Sie, dass $10 den zehnten Parameter nicht abrufen kann; um den zehnten Parameter zu erhalten, benötigen Sie ${10}. Wenn n>=10, müssen Sie ${n} verwenden, um den Parameter zu erhalten.
Darüber hinaus gibt es mehrere Sonderzeichen, die zur Behandlung von Parametern verwendet werden:
| Parameterverarbeitung | Beschreibung |
|---|---|
| $# | Die Anzahl der an das Skript oder die Funktion übergebenen Parameter |
| $* | Alle an das Skript übergebenen Parameter als eine einzelne Zeichenkette anzeigen |
| $$ | Die aktuelle Prozess-ID des laufenden Skripts |
| $! | Die ID des letzten im Hintergrund laufenden Prozesses |
| $@ | Wie $*, aber bei Verwendung Anführungszeichen hinzufügen und jeden Parameter in Anführungszeichen zurückgeben. |
| $- | Die aktuell von der Shell verwendeten Optionen anzeigen, mit derselben Funktion wie der set-Befehl. |
| $? | Den Exit-Status des letzten Befehls anzeigen. 0 bedeutet kein Fehler; jeder andere Wert weist auf einen Fehler hin. |