Bash If-statements gebruiken (met 4 voorbeelden)

Bash If-statements gebruiken (met 4 voorbeelden)
fatmawati achmad zaenuri/Shutterstock
Gebruik de Linux Bash if-instructie om voorwaardelijke expressies te maken met een if then fi structuur. Toevoegen elif trefwoorden voor aanvullende voorwaardelijke uitdrukkingen, of de else trefwoord om een ​​allesomvattende codesectie te definiëren die wordt uitgevoerd als er geen eerdere voorwaardelijke clausule is uitgevoerd.

Alle niet-triviale Bash-scripts moeten beslissingen nemen. De Bash if-instructie laat je Linux-script vragen stellen en, afhankelijk van het antwoord, verschillende secties code uitvoeren. Hier is hoe ze werken.

Wat is voorwaardelijke uitvoering?

In alle Bash-scripts, behalve de meest triviale, is het meestal nodig dat de uitvoeringsstroom een ​​ander pad door het script volgt, afhankelijk van de uitkomst van een beslissing. Dit wordt voorwaardelijke uitvoering genoemd.

Een manier om te beslissen welke tak van uitvoering moet worden genomen, is door een if stelling. Je hoort het misschien if uitspraken genoemd if then verklaringen, of if then else verklaringen. Het zijn verschillende namen voor hetzelfde.

9 voorbeelden van for Loops in Linux Bash-scripts

VERWANT9 voorbeelden van for Loops in Linux Bash-scripts

De if verklaring zegt dat als iets waar is, doe het dan dit. Maar als het iets niet waar is, doe het dan Dat in plaats van. Het “iets” kan veel dingen zijn, zoals de waarde van een variabele, de aanwezigheid van een bestand, of twee strings overeenkomen.

Voorwaardelijke uitvoering is essentieel voor elk zinvol script. Zonder dat ben je erg beperkt in wat je je script kunt laten doen. Tenzij het zinvolle beslissingen kan nemen, zult u niet in staat zijn om echte problemen aan te pakken en werkbare oplossingen te produceren.

De if verklaring is waarschijnlijk de meest gebruikte manier om voorwaardelijke uitvoering te verkrijgen. Hier leest u hoe u het kunt gebruiken in Bash-scripts.

Een eenvoudig voorbeeld van een If-verklaring

Dit is de canonieke vorm van de eenvoudigste if stelling:

if [ this-condition-is-true ]
then
  execute-these-statements
fi

Als de voorwaarde in de tekst wordt omgezet in waar, worden de scriptregels in het then clausule worden uitgevoerd. Als u scripts doorzoekt die door anderen zijn geschreven, ziet u mogelijk de if verklaring zo geschreven:

if [ this-condition-is-true ]; then
  execute-these-statements
fi

Enkele aandachtspunten:

  • De if verklaring wordt schriftelijk afgesloten fi.
  • Er moet een ruimte zijn na de eerste beugel ” [ ” and before the second bracket ” ] ” van de voorwaardelijke test.
  • Als je de then trefwoord op dezelfde regel als de voorwaardelijke test, zorg ervoor dat u een puntkomma gebruikt ” ; ” na de proef.

We kunnen een optioneel toevoegen else clausule om code uit te voeren als de conditietest onwaar blijkt te zijn. De else clausule heeft geen a nodig then trefwoord.

if [ this-condition-is-true ]
then
  execute-these-statements
else
  execute-these-statements-instead
fi

Dit script toont een eenvoudig voorbeeld van een if verklaring die gebruik maakt van een else clausule. De voorwaardelijke test controleert of de klant ouder is dan of gelijk is aan 21 jaar. Als dat zo is, kan de klant het pand betreden en de then clausule wordt uitgevoerd. Als ze niet oud genoeg zijn, de else clausule wordt uitgevoerd en ze zijn niet toegestaan.

#!/bin/bash

customer_age=25

if [ $customer_age -ge 21 ]
then
  echo "Come on in."
else
  echo "You can't come in."
fi

Kopieer het script van bovenaf naar een editor, sla het op als een bestand met de naam “if-age.sh” en gebruik de chmod commando om het uitvoerbaar te maken. U moet dat doen met elk van de scripts die we bespreken.

chmod +x if-age.sh

Chmod gebruiken om een ​​script uitvoerbaar te maken

Laten we ons script uitvoeren.

./if-age.sh

Het script if-age.sh uitvoeren met de leeftijdsvariabele ingesteld op 25

Nu gaan we het bestand bewerken en een leeftijd van minder dan 21 jaar gebruiken.

customer_age=18

Breng die wijziging aan in uw script en sla uw wijzigingen op. Als we het nu uitvoeren, retourneert de voorwaarde false en wordt de else-clausule uitgevoerd.

./if-age.sh

Het script if-age.sh uitvoeren met de leeftijdsvariabele ingesteld op 18

De elif-clausule

De elif clausule voegt extra voorwaardelijke tests toe. Je kunt er zoveel hebben elif clausules zoals u wilt. Ze worden achtereenvolgens geëvalueerd totdat een ervan waar blijkt te zijn. Als geen van de elif voorwaardelijke tests blijken waar te zijn, de else clausule, indien aanwezig, wordt uitgevoerd.

Dit script vraagt ​​om een ​​getal en vertelt je vervolgens of het even of oneven is. Nul is een even getal, dus we hoeven niets te testen.

Alle andere getallen worden getest door de modulo van een deling door twee te vinden. In ons geval is de modulo het gebroken deel van het resultaat van een deling door twee. Als er geen breukdeel is, is het getal precies door twee deelbaar. Daarom is het een even getal.

#!/bin/bash

echo -n "Enter a number: "

read number

if [ $number -eq 0 ]
then
  echo "You entered zero. Zero is an even number."
elif [ $(($number % 2)) -eq 0 ]
then
  echo "You entered $number. It is an even number."
else
  echo "You entered $number. It is an odd number."
fi

Om dit script uit te voeren, kopieert u het naar een editor en slaat u het op als “if-even.sh”, en gebruikt u vervolgens chmod om het uitvoerbaar te maken.

Laten we het script een paar keer uitvoeren en de uitvoer controleren.

./if-even.sh

Het script if-even.sh uitvoeren met verschillende invoer

Dat werkt allemaal prima.

Verschillende vormen van voorwaardelijke test

De beugels ” [] ” die we voor onze voorwaardelijke tests hebben gebruikt, is een verkorte manier om de test programma. Daarom, alle vergelijkingen en tests die test steunen zijn beschikbaar voor uw if stelling.

Dit zijn er maar een paar:

  • ! uitdrukking: Waar als de uitdrukking onwaar is.
  • -n tekenreeks: Waar als de lengte van de tekenreeks groter is dan nul.
  • -z tekenreeks: Waar als de lengte van de tekenreeks nul is. Dat wil zeggen, het is een lege string.
  • tekenreeks1 = tekenreeks2: True als string1 hetzelfde is als string2.
  • tekenreeks1 != tekenreeks2: True als string1 niet hetzelfde is als string2.
  • geheel getal1 -eq geheel getal2: Waar als geheel getal1 numeriek gelijk is aan geheel getal2
  • geheel getal1 -qt geheel getal2: Waar als geheel getal1 numeriek groter is dan geheel getal2
  • geheel getal1 -lt geheel getal2: Waar als geheel getal1 numeriek kleiner is dan geheel getal2
  • -d map: waar als de map bestaat.
  • -e bestand: waar als het bestand bestaat.
  • -s bestand: Waar als het bestand bestaat met een grootte van meer dan nul.
  • -r bestand: Waar als het bestand bestaat en de leesmachtiging is ingesteld.
  • -w-bestand: Waar als het bestand bestaat en de schrijfrechten zijn ingesteld.
  • -x bestand: Waar als het bestand bestaat en de uitvoermachtiging is ingesteld.

In de tabel kunnen “bestand” en “map” mappaden bevatten, relatief of absoluut.

Het gelijkteken “=” en de gelijkheidstest -eq Zijn niet hetzelfde. Het gelijkteken voert a uit karakter voor karakter tekst vergelijking. De gelijkheidstest voert een numeriek vergelijking.

We kunnen dit zien door de test programma op de opdrachtregel.

test "this string" = "this string"
test "this string" = "that string"
test 1 = 001
test 1 -eq 001

In elk geval gebruiken we de echo opdracht om de retourcode van de laatste opdracht af te drukken. Nul betekent waar, één betekent onwaar.

Het testprogramma op de opdrachtregel gebruiken om verschillende vergelijkingen te testen

Het gelijkteken gebruiken ” = ” geeft ons een onjuist antwoord door 1 te vergelijken met 001. Dat klopt, want het zijn twee verschillende tekenreeksen. Numeriek ze hebben dezelfde waarde – één – dus de -eq operator retourneert een waar antwoord.

Als u jokertekens wilt gebruiken in uw voorwaardelijke test, gebruikt u de dubbele haak ” [[ ]] ” syntaxis.

#!/bin/bash

if [[ $USER == *ve ]]
then
  echo "Hello $USER"
else
  echo "$USER does not end in 've'"
fi

Dit script controleert de accountnaam van de huidige gebruiker. Als het eindigt op “ve“, drukt het de gebruikersnaam af. Als het niet eindigt in ” ve “, zegt het script je, en eindigt.

./if-wild.sh

Uitvoeren van het if-wild.sh-script dat zoeken met jokertekens laat zien in de voorwaardelijke test van de if-instructie

Geneste If-verklaringen

Je kunt een if verklaring in een ander if stelling.

Dit is volkomen acceptabel, maar nestelend if verklaringen zorgen voor code die minder gemakkelijk te lezen en moeilijker te onderhouden is. Als je merkt dat je meer dan twee of drie niveaus nestelt if statements, moet u waarschijnlijk de logica van uw script reorganiseren.

Hier is een script dat de dag als een getal krijgt, van één tot zeven. Eén is maandag, zeven is zondag.

Het vertelt ons de openingstijden van een winkel. Als het een doordeweekse dag of zaterdag is, meldt het dat de winkel open is. Als het een zondag is, meldt het dat de winkel gesloten is.

Als de winkel open is, is de geneste if verklaring doet een tweede test. Als de dag woensdag is, vertelt het ons dat het alleen ’s morgens open is.

#!/bin/bash

# get the day as a number 1..7
day=$(date +"%u")

if [ $day -le 6 ]
then
  ## the shop is open
  if [ $day -eq 3 ]
  then
    # Wednesday is half-day
    echo "On Wednesdays we open in the morning only."
  else
    # regular week days and Saturday
   echo "We're open all day."
  fi
else
  # not open on Sundays
  echo "It's Sunday, we're closed."
fi

Kopieer dit script naar een editor, sla het op als een bestand met de naam “if-shop.sh” en maak het uitvoerbaar met behulp van de chmod commando.

We hebben het script één keer uitgevoerd en vervolgens de klok van de computer gewijzigd in een woensdag en het script opnieuw uitgevoerd. We veranderden toen de dag in een zondag en liepen het nog een keer.

./if-shop.sh
./if-shop.sh
./if-shop.sh

Het script if-shop.sh uitvoeren met de computerklok ingesteld op een weekdag, dan een woensdag en dan een zondag

Het geval Voor als

Voorwaardelijke uitvoering is wat kracht geeft aan programmeren en scripten, en de nederigen if statement is misschien wel de meest gebruikte manier om het uitvoeringspad binnen code te veranderen. Maar dat betekent niet dat het altijd het antwoord is.

Goede code schrijven betekent weten welke opties je hebt en welke je het beste kunt gebruiken om aan een bepaalde eis te voldoen. De if statement is geweldig, maar laat het niet het enige hulpmiddel in je tas zijn. Bekijk vooral de case verklaring die in sommige scenario’s een oplossing kan zijn.

Nieuwste artikelen

spot_img

Related Stories

Leave A Reply

Vul alstublieft uw commentaar in!
Vul hier uw naam in