Android

Bash-functies

Bash vs Python для DevOps инженеров и системных администраторов

Bash vs Python для DevOps инженеров и системных администраторов

Inhoudsopgave:

Anonim

Een Bash-functie is in wezen een reeks opdrachten die meerdere keren kunnen worden opgeroepen. Het doel van een functie is om u te helpen uw bash-scripts leesbaarder te maken en te voorkomen dat u steeds dezelfde code hoeft te schrijven.

In vergelijking met de meeste programmeertalen zijn Bash-functies enigszins beperkt. In deze tutorial behandelen we de basisprincipes van Bash-functies en laten we u zien hoe u deze kunt gebruiken in uw shellscripts.

Bash functie verklaring

De syntaxis voor het declareren van een bash-functie is heel eenvoudig. Ze kunnen in twee verschillende formaten worden gedeclareerd:

  1. Het eerste formaat begint met de functienaam, gevolgd door haakjes. Dit is het voorkeurs- en meer gebruikte formaat.

    function_name () { commands }

    Versie met één lijn:

    function_name () { commands; }

    Het tweede formaat begint met het function gereserveerde woord gevolgd door de functienaam.

    function function_name { commands }

    Versie met één lijn:

    function function_name { commands; }

Enkele punten om op te merken:

  • De opdrachtenlijst tussen accolades {} is de hoofdtekst van de functie. De accolades die het functielichaam omringen, moeten van het lichaam worden gescheiden door spaties of nieuwe lijnen. Het definiëren van een functie voert het niet uit. Gebruik de functienaam om een ​​bash-functie op te roepen. Opdrachten tussen de accolades worden uitgevoerd telkens wanneer de functie in het shellscript wordt aangeroepen. De functiedefinitie moet vóór elke aanroep van de functie worden geplaatst ; moet de laatste opdracht in de functie volgen. Probeer altijd uw functienamen beschrijvend te houden.

Bekijk dit voorbeeld om dit beter te begrijpen:

~ / Hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

Laten we de code regel voor regel analyseren:

  • In regel 3 definiëren we de functie door hem een ​​naam te geven en de accolade te openen { die het begin van het lichaam van de functie aangeeft. Lijn 4 is het functie-element. De hoofdtekst kan meerdere opdrachten en variabele declaraties bevatten. hello_world 5 , de sluitende accolade } , definieert het einde van de functie hello_world . In regel 7 we de functie uit. U kunt de functie zo vaak uitvoeren als u nodig hebt.

Als je het script uitvoert, wordt het hello, world afgedrukt.

Variabelenbereik

Globale variabelen zijn variabelen die overal in het script toegankelijk zijn, ongeacht het bereik. In Bash worden alle variabelen standaard gedefinieerd als globaal, zelfs als ze binnen de functie worden gedeclareerd.

Lokale variabelen kunnen worden gedeclareerd in de hoofdtekst met het local trefwoord en kunnen alleen binnen die functie worden gebruikt. U kunt lokale variabelen met dezelfde naam hebben in verschillende functies.

Laten we een voorbeeld bekijken om beter te illustreren hoe het bereik van variabelen in Bash werkt:

~ / Variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

Het script begint met het definiëren van twee globale variabelen var1 en var2 . Vervolgens een functie die een lokale variabele var1 instelt en de globale variabele var2 wijzigt.

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

Uit de bovenstaande output kunnen we concluderen dat:

  • Als u een lokale variabele in de hoofdtekst instelt met dezelfde naam als een bestaande globale variabele, heeft deze voorrang op de globale variabele. Globale variabelen kunnen vanuit de functie worden gewijzigd.

Retourwaarden

In tegenstelling tot functies in "echte" programmeertalen, kunt u met Bash-functies geen waarde retourneren wanneer deze wordt aangeroepen. Wanneer een bash-functie is voltooid, is de retourwaarde de status van de laatste instructie die in de functie is uitgevoerd, 0 voor succes en een niet-nul decimaal getal in het bereik 1 - 255 voor mislukking.

De retourstatus kan worden opgegeven met behulp van het retourwoord en wordt toegewezen aan de variabele $? . Het return beëindigt de functie. Je kunt het zien als de exit-status van de functie.

~ / Return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

Om daadwerkelijk een willekeurige waarde van een functie te retourneren, moeten we andere methoden gebruiken. De eenvoudigste optie is om het resultaat van de functie toe te wijzen aan een globale variabele:

~ / Return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

Een andere, betere optie om een ​​waarde van een functie te retourneren, is om de waarde naar stdout te sturen met behulp van echo of printf zoals hieronder weergegeven:

~ / Return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

In plaats van eenvoudigweg de functie uit te voeren die het bericht naar stdout zal afdrukken, wijzen we de functie-uitvoer toe aan de variabele func_result met behulp van de opdrachtvervanging $() . De variabele kan later indien nodig worden gebruikt.

Argumenten doorgeven aan Bash-functies

Om een ​​willekeurig aantal argumenten aan de bash-functie door te geven, plaatst u ze gewoon achter de naam van de functie, gescheiden door een spatie. Het is een goede gewoonte om de argumenten dubbel te citeren om misparsing van een argument met spaties erin te voorkomen.

  • De doorgegeven parameters zijn $1 , $2 , $3 $n , overeenkomend met de positie van de parameter achter de naam van de functie. De variabele $0 is gereserveerd voor de naam van de functie. De variabele $# bevat het aantal doorgegeven parameters / argumenten aan de De variabelen $* en $@ alle positionele parameters / argumenten die aan de functie zijn doorgegeven.
    • Bij dubbele aanhaling wordt "$*" uitgebreid naar een enkele string gescheiden door een spatie (het eerste teken van IFS) - "$1 $2 $n" . Bij dubbele aanhaling wordt "$@" uitgebreid naar afzonderlijke strings - "$1" "$2" "$n" . Indien niet dubbel vermeld, zijn $* en $@ hetzelfde.

Hier is een voorbeeld:

~ / Passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

Conclusie

Een Bash-functie is een blok herbruikbare code dat is ontworpen om een ​​bepaalde bewerking uit te voeren. Eenmaal gedefinieerd, kan de functie meerdere keren in een script worden aangeroepen.

Misschien wilt u ook lezen hoe u een Bash-functie kunt gebruiken om een ​​memorabele sneltoetsopdracht voor een langere opdracht te maken.

bash-terminal