Android

Bash-funktioner

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

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

Innehållsförteckning:

Anonim

En Bash-funktion är i huvudsak en uppsättning kommandon som kan kallas flera gånger. Syftet med en funktion är att hjälpa dig att göra dina basskript mer läsbara och att undvika att skriva samma kod om och om igen.

Jämfört med de flesta programmeringsspråk är Bash-funktionerna något begränsade. I den här tutorialen kommer vi att täcka grunderna i Bash-funktioner och visa dig hur du använder dem i dina skalskript.

Basfunktionsdeklaration

Syntaxen för att deklarera en bash-funktion är mycket enkel. De kan deklareras i två olika format:

  1. Det första formatet börjar med funktionsnamnet, följt av parenteser. Detta är det föredragna och mer använda formatet.

    function_name () { commands }

    Enfaldig version:

    function_name () { commands; }

    Det andra formatet börjar med function reserverat ord följt av funktionsnamnet.

    function function_name { commands }

    Enfaldig version:

    function function_name { commands; }

Få poäng att notera:

  • Kommandolistan mellan lockiga hängslen {} är funktionen. De lockiga hängslen som omger funktionskroppen måste separeras från kroppen genom mellanrum eller nylinjer. Att definiera en funktion kör inte den. För att åberopa en bash-funktion använder du bara funktionsnamnet. Kommandon mellan de lockiga hängslen exekveras varje gång funktionen anropas i skalskriptet. Funktionsdefinitionen måste placeras innan några samtal till funktionen. När du använder en enda rad "komprimerade" funktioner, en semikolon ; måste följa det sista kommandot i funktionen. Du bör alltid försöka hålla dina funktionsnamn beskrivande.

För att förstå detta bättre, titta på följande exempel:

~ / Hello_world.sh

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

Låt oss analysera koden rad för rad:

  • I rad 3 definierar vi funktionen genom att ge den ett namn och öppna den lockiga stången { som markerar början på funktionens kropp. Linje 4 är funktionskroppen. Funktionskroppen kan innehålla flera kommandon och variabla deklarationer. Linje 5 , den stängande krullningsfästet } , definierar slutet på hello_world funktionen. I rad 7 utför vi funktionen. Du kan köra funktionen så många gånger du behöver.

Om du kör skriptet kommer det att skrivas ut hello, world .

Variabler Omfång

Globala variabler är variabler som kan nås var som helst i skriptet oavsett omfattning. I Bash definieras alla variabler som standard som globala, även om de anges i funktionen.

Lokala variabler kan deklareras i funktionskroppen med det local nyckelordet och kan endast användas inom den funktionen. Du kan ha lokala variabler med samma namn i olika funktioner.

För att bättre illustrera hur variablerna fungerar i Bash, låt oss överväga ett exempel:

~ / 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"

Skriptet börjar med att definiera två globala variabler var1 och var2 . Sedan en funktion som ställer in en lokal variabel var1 och modifierar den globala variabeln var2 .

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

Från utgången ovan kan vi dra slutsatsen att:

  • Om du ställer in en lokal variabel i funktionskroppen med samma namn som en befintlig global variabel kommer den att ha företräde framför den globala variabeln. Globala variabler kan ändras från funktionen.

Returnera värden

Till skillnad från funktioner på ”riktiga” programmeringsspråk, låter Bash-funktionerna dig inte returnera ett värde när du ringer. När en bash-funktion slutförts är dess returräge statusen för det sista uttalet som utförts i funktionen, 0 för framgång och icke-nollt decimaltal i intervallet 1 - 255 för fel.

Returstatus kan anges med hjälp av return , och det tilldelas variabeln $? . Returmeddelandet avslutar funktionen. Du kan tänka på det som funktionens utgångsstatus.

~ / Return_values.sh

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

some result 55

För att faktiskt returnera ett godtyckligt värde från en funktion måste vi använda andra metoder. Det enklaste alternativet är att tilldela resultatet av funktionen till en global variabel:

~ / Return_values.sh

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

some result

Ett annat, bättre alternativ att returnera ett värde från en funktion är att skicka värdet till stdout med eko eller printf som visas nedan:

~ / Return_values.sh

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

some result

Istället för att helt enkelt utföra funktionen som kommer att skriva ut meddelandet till stdout, tilldelar vi funktionsutgången till func_result variabeln med kommandosubstitutionen $() . Variabeln kan senare användas efter behov.

Överför argument till basfunktioner

För att överföra valfritt antal argument till bash-funktionen, placera dem direkt efter funktionens namn, åtskilda med ett mellanslag. Det är en bra praxis att dubbelcitera argumenten för att undvika felaktigt uppdelning av ett argument med mellanslag i det.

  • De passerade parametrarna är $1 , $2 , $3 $n , motsvarande parameterns position efter funktionens namn. Variabeln $0 är reserverad för funktionens namn. Variabeln $# innehåller antalet positionsparametrar / argument som skickas till funktionen $* och $@ variabler innehåller alla positionsparametrar / argument som skickas till funktionen.
    • När det är dubbelt citerat expanderar "$*" till en enda sträng separerad med mellanslag (det första tecknet i IFS) - "$1 $2 $n" När dubbelt citerat expanderar "$@" till separata strängar - "$1" "$2" "$n" När inte dubbelt citerade är $* och $@ desamma.

Här är ett exempel:

~ / Passing_arguments.sh

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

Hello Joe

Slutsats

En Bash-funktion är ett block med återanvändbar kod utformad för att utföra en viss operation. När den har definierats kan funktionen kallas flera gånger i ett skript.

Du kanske också vill läsa om hur du använder en Bash-funktion för att skapa ett minnesvärt genvägskommando för ett längre kommando.

bash terminal