Android

Bash-funksjoner

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

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

Innholdsfortegnelse:

Anonim

En Bash-funksjon er egentlig et sett med kommandoer som kan kalles flere ganger. Formålet med en funksjon er å hjelpe deg med å gjøre bask-skriptene mer leselige og å unngå å skrive den samme koden om og om igjen.

Sammenlignet med de fleste programmeringsspråk, er bash-funksjoner noe begrenset. I denne opplæringen vil vi dekke det grunnleggende om Bash-funksjoner og vise deg hvordan du bruker dem i skallskriptene dine.

Bash-funksjonserklæring

Syntaksen for å erklære en bash-funksjon er veldig enkel. De kan deklareres i to forskjellige formater:

  1. Det første formatet starter med funksjonsnavnet, etterfulgt av parenteser. Dette er det foretrukne og mer brukte formatet.

    function_name () { commands }

    Enkeltlinjeversjon:

    function_name () { commands; }

    Det andre formatet starter med function reservert ord etterfulgt av funksjonsnavnet.

    function function_name { commands }

    Enkeltlinjeversjon:

    function function_name { commands; }

Få poeng å merke seg:

  • Kommandolisten mellom krøllete seler {} er hoveddelen av funksjonen. De krøllete selene som omgir funksjonslegemet, må skilles fra kroppen ved mellomrom eller nye linjer. Definisjon av en funksjon utfører ikke den. For å påkalle en bash-funksjon bruker du bare funksjonsnavnet. Kommandoer mellom de krøllete selene utføres når funksjonen kalles i shell-skriptet. Funksjonsdefinisjonen må plasseres før eventuelle anrop til funksjonen. Når du bruker en linje "komprimerte" funksjoner, en semikolon ; må følge den siste kommandoen i funksjonen. Du bør alltid prøve å holde funksjonsnavnene beskrivende.

For å forstå dette bedre, ta en titt på følgende eksempel:

~ / Hello_world.sh

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

La oss analysere koden linje for linje:

  • I linje 3 definerer vi funksjonen ved å gi den et navn, og åpner den krøllete selen { som markerer starten på funksjonens kropp. Linje 4 er funksjonskroppen. Funksjonskroppen kan inneholde flere kommandoer og variabel erklæringer. Linje 5 , den lukkede krøllebraketten } , definerer slutten av hello_world funksjonen. I linje 7 utfører vi funksjonen. Du kan utføre funksjonen så mange ganger du trenger.

Hvis du kjører skriptet, vil det trykke hello, world .

Variabler Omfang

Globale variabler er variabler som du kan få tilgang til hvor som helst i skriptet uansett omfang. I Bash er alle variabler som standard definert som globale, selv om deklarert i funksjonen.

Lokale variabler kan deklareres i funksjonsorganet med det local nøkkelordet og kan bare brukes inne i den funksjonen. Du kan ha lokale variabler med samme navn i forskjellige funksjoner.

For å bedre illustrere hvordan variabler omfanget fungerer i Bash, la oss vurdere et eksempel:

~ / 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 starter med å definere to globale variabler var1 og var2 . Deretter en funksjon som setter en lokal variabel var1 og endrer den globale variabelen var2 .

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

Fra utgangen over kan vi konkludere med at:

  • Hvis du angir en lokal variabel i funksjonsdelen med samme navn som en eksisterende global variabel, vil den ha forrang for den globale variabelen. Globale variabler kan endres fra funksjonen.

Returner verdier

I motsetning til funksjoner i “ekte” programmeringsspråk, lar ikke Bash-funksjonene deg returnere en verdi når du ringer. Når en bash-funksjon er fullført, er dens returverdi status for den siste uttalelsen som ble utført i funksjonen, 0 for suksess og ikke-null desimalnummer i området 1 - 255 for feil.

Returstatusen kan spesifiseres ved å bruke retursøkkelordet, og det tilordnes variabelen $? . return statementet avslutter funksjonen. Du kan tenke på det som funksjonens utgangsstatus.

~ / Return_values.sh

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

some result 55

For å faktisk returnere en vilkårlig verdi fra en funksjon, må vi bruke andre metoder. Det enkleste alternativet er å tilordne resultatet av funksjonen til en global variabel:

~ / Return_values.sh

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

some result

Et annet, bedre alternativ for å returnere en verdi fra en funksjon er å sende verdien til stdout ved hjelp av ekko eller printf som vist nedenfor:

~ / Return_values.sh

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

some result

I stedet for å bare utføre funksjonen som vil skrive ut meldingen til stdout, tilordner vi funksjonsutgangen til func_result variabelen ved å bruke kommandosubstitusjonen $() . Variabelen kan senere brukes etter behov.

Overfører argumenter til bash-funksjoner

For å overføre et hvilket som helst antall argumenter til bash-funksjonen, plasser dem rett etter funksjonens navn, atskilt med et mellomrom. Det er en god praksis å dobbelt sitere argumentene for å unngå feilparing av et argument med mellomrom i det.

  • De passerte parameterne er $1 , $2 , $3 $n , tilsvarer parameterens plassering etter funksjonens navn. $0 variabelen er reservert for funksjonens navn. $# -Variabelen inneholder antall posisjonsparametere / argumenter som er gitt til funksjon. Variablene $* og $@ inneholder alle posisjonsparametere / argumenter som er sendt til funksjonen.
    • Når det er dobbelt sitert, utvides "$*" til en enkelt streng skilt med mellomrom (det første tegnet til IFS) - "$1 $2 $n" Når dobbelt sitert, utvides "$@" til separate strenger - "$1" "$2" "$n" Når ikke det er dobbelt sitert, er $* og $@ de samme.

Her er et eksempel:

~ / Passing_arguments.sh

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

Hello Joe

Konklusjon

En Bash-funksjon er en blokk med gjenbrukbar kode designet for å utføre en bestemt operasjon. Når den er definert, kan funksjonen kalles flere ganger i et skript.

Det kan også være lurt å lese om hvordan du bruker en Bash-funksjon til å lage en minneverdig snarveikommando for en lengre kommando.

bash terminal