Begrip van Bash If Else en andere Voorwaardelijke Verklaringen

Het schrijven van een Bourne Again Shell (Bash) script kan een lonende ervaring zijn, vooral wanneer je er logica aan toevoegt om de robuustheid ervan te garanderen. Een manier om deze logica op te nemen, waardoor je script slimmer wordt, is door middel van het gebruik van conditionele verklaringen, specifiek ‘bash if else’.

In deze diepe duik sta je op het punt om de kracht en nuances van de Bash if-else en case verklaringen te begrijpen. Dit zal je helpen bij het maken van foutloze, intelligente Bash-scripts. We zullen ook enkele beste praktijken toevoegen om ervoor te zorgen dat je script als een professional schrijft.

Opgewonden? Duik erin en verhoog je Bash-scripting vaardigheden!

Het podium instellen: Vereisten

Om het meeste uit deze tutorial te halen, zijn er enkele essentiële zaken die je klaar moet hebben:

  • A Linux or Windows system armed with Bash. For those on Windows, the Windows Subsystem for Linux (WSL) is your best bet.
  • A code/text editor to write and refine your ‘bash if else’ scripts.

Waarom zou je bash if else verklaringen gebruiken?

Waarom worden conditionele verklaringen zo gewaardeerd in Bash scripting? Simpel gezegd, ze geven je scripts beslissingsvermogen op basis van vooraf gedefinieerde voorwaarden.

Bijvoorbeeld, je kunt ‘bash if else’ gebruiken om te controleren of een bestand bestaat voordat je probeert het te verwijderen. Als alternatief wil je misschien controleren of een gebruiker over de vereiste rechten beschikt voordat je ze toegang geeft tot een bron.

Het injecteren van scripts met ‘bash if else’-structuren vergroot niet alleen hun flexibiliteit, maar ook hun kracht. Stel je een script voor dat is ontworpen om alle bestanden in een map te verwijderen. Door ‘bash if else’ te gebruiken, kun je chirurgisch alleen die bestanden verwijderen die ouder zijn dan 30 dagen, terwijl de rest behouden blijft.

Dieper ingaan op de ‘bash if else’-verklaring

Lat…

Op zijn kern is de ‘bash if else’-verklaring een toegangspoort om voorwaardelijke instructies in je Bash-scripts in te voegen. Bekijk de elegante syntaxis hieronder:

  • Het begint met het if-sleutelwoord, gevolgd door de voorwaarden ingesloten binnen [[ ]]. Hierna wordt de code die zich binnen de ‘bash if else’-verklaring bevindt, uitgevoerd, eindigend met het sleutelwoord fi.
  • Het sleutelwoord then scheidt de voorwaarde van de acties (of instructies) die worden uitgevoerd wanneer de voorwaarden zijn vervuld. Dit actieblok kan meerdere regels beslaan, gescheiden door puntkomma’s (;).
if [[ condition ]]; then
	statement
fi

Stel je voor dat je een inlogsysteem script. Het vraagt om de juiste gebruikersnaam voordat toegang wordt verleend:

1. Start je terminal en maak een nieuw bestand bash_if_demo.sh met behulp van je favoriete teksteditor. Dit wordt onze speeltuin om ‘bash if else’-verklaringen te begrijpen.

nano bash_if_demo.sh

2. Plaats het onderstaande ‘bash if else’-voorbeeld in je bash_if_demo.sh-bestand. Zodra het is ingevoegd, sla je de wijzigingen op en verlaat je de editor.

Het voorbeeld ‘bash if else’-script vraagt om een gebruikersnaam. Als de verwachte gebruikersnaam wordt ingevoerd, wordt er een welkomstbericht weergegeven, aangevuld met de huidige datum en tijd.

Het bijhouden van een record van de datum en tijd van pogingen tot toegang door gebruikers kan van onschatbare waarde zijn voor toekomstige analyses.

De introductieregel #!/bin/bash (algemeen bekend als shebang) geeft het systeem aan welke interpreter moet worden gebruikt voor het verwerken van de daaropvolgende code in het script. Hier is ‘bash’ onze gekozen interpreter.

#!/bin/bash
# Drukt een vraag af op het scherm.
echo "Whats your name?"
# Vangt toetsenbordinvoer op en slaat deze op in de variabele $NAME
read NAME
# Start de 'bash if else'-verklaring - onderzoekt of de waarde in $NAME 
# overeenkomt met "ATA". Als er een overeenkomst is, wordt de ingesloten code uitgevoerd. Zo niet, dan wordt deze overgeslagen.
if [ $NAME == "ATA" ]
then
  # Geeft een bericht weer alleen als de waarde in $NAME gelijk is aan "ATA".
  echo "Welcome back ATA!"
fi
# Buiten de 'bash if else', geeft dit altijd de huidige datum en tijd weer.
date

3. Laten we nu onze ‘bash if else’-script op de proef stellen. Voer de onderstaande opdracht uit:

bash bash_if_demo.sh

Onthoud, ongeacht welke variant van de Bash-shell je gebruikt, voeg ‘bash’ toe als voorvoegsel aan de naam van je script. Dit zorgt ervoor dat het systeem Bash gebruikt voor de uitvoering van het script.

Voer “ATA” in en druk op Enter. Het resultaat zou als volgt moeten zijn:

Demonstration of the bash_if_demo.sh ‘bash if else’ Script

Als je iets anders invoert dan “ATA,” zal het welkomstbericht ontbreken in de uitvoer. Alleen de huidige datum en tijd zullen worden getoond. Dit gedrag is te danken aan de ‘bash if else’-verklaring die controleert op een exacte overeenkomst met de waarde in de $NAME-variabele.

Houd er rekening mee dat ‘bash if else’-verklaringen hoofdlettergevoelig zijn. Daarom zijn “ata,” “aTa,” “Ata,” enzovoort, verschillend van “ATA.”

Outcome on Entering a Non-matching Value

Test consequent uw ‘bash if else’-scripts met verschillende invoer. Dit zorgt ervoor dat de scripts werken zoals verwacht.

Dieper graven: Geneste ‘bash if else’-verklaringen

Je hebt al de basisbeginselen begrepen van het maken van ‘bash if else’-verklaringen. Hoewel deze basiskennis voldoende is voor eenvoudige taken, vereisen ingewikkelde scripts vaak geavanceerde constructies. Hier komen geneste ‘bash if else’-verklaringen in beeld. In feite is het een ‘if’-verklaring met daarin één of meerdere extra ‘if’-verklaringen.

De structuur hieronder illustreert de basis-syntax voor geneste ‘bash if else’-verklaringen. Hier omvat de buitenste if [[ voorwaarden ]]-clausule code die alleen wordt uitgevoerd bij vervulling van de voorwaarde. In onze context is de geneste code een andere ‘if’-verklaring.

  • if [[ voorwaarden ]] – Dit vertegenwoordigt de externe ‘bash if else’-verklaring. De geneste code (nog een ‘if’-verklaring) wordt alleen uitgevoerd als de opgegeven voorwaarde waar is.
  • if [[ voorwaarde2 ]] – Dit vertegenwoordigt de interne ‘bash if else’-clausule. Het bevat code die wordt uitgevoerd als en alleen als beide voorwaarden zijn voldaan.
if [[ conditions ]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

Laten we dieper ingaan. We zullen ons vorige ‘bash if else’-voorbeeld verbeteren door nu een if-verklaring toe te voegen die vraagt naar een wachtwoord:

1. Stel eerst een nieuw bestand in met de titel bash_nested_if_demo.sh met behulp van je favoriete teksteditor.

nano bash_nested_if_demo.sh

2. Verplaats de ‘bash if else’-code hieronder naar het bestand bash_nested_if_demo.sh, sla je wijzigingen op en sluit de editor.

Deze ‘bash if else’-code vraagt zowel om een naam als om een wachtwoord. Als de voorwaarden voor de naam en het wachtwoord overeenkomen, wordt een specifieke boodschap weergegeven. Als er geen overeenkomst is, wordt alleen de huidige datum en tijd weergegeven.

#!/bin/bash
# Stelt een bericht voor waarin wordt gevraagd om een gebruikersnaam.
echo "Whats your name?"
# Verzamelt gebruikersinvoer.
read NAME
# Start de 'bash if else'-verklaring om te controleren of $NAME overeenkomt met "ATA."
if [ $NAME == "ATA" ]
 then
 # Stelt een volgende vraag, dit keer voor een wachtwoord.
 echo "Password?"
 # Vangt de wachtwoordinvoer op.
 read Password
   # Geneste 'bash if else' - Bepaalt of het $Wachtwoord overeenkomt met "pwd123."
   if [ "$Password" == "pwd123" ]; then
     # Toont een bericht als aan beide voorwaarden met betrekking tot naam en wachtwoord is voldaan.
     echo "You've successfully logged in as ATA."
   fi
fi
# Benadrukt de huidige datum en tijd.
date

3. Nu, laten we dit ‘bash if else’-script in actie zien. Voer de onderstaande opdracht uit:

bash bash_nested_if_demo.sh

Voor optimale resultaten, voer ATA in als de gebruikersnaam en pwd123 als het wachtwoord.

Demonstrating the bash_nested_if_demo.sh Script in action

Als uw invoer afwijkt van “ATA” of “pwd123”, ontvangt u alleen feedback over de huidige datum en tijd. Dit komt doordat de ‘bash if else’-structuur vereist dat aan beide voorwaarden wordt voldaan.

Validating if entered conditions are met using ‘bash if else’

Het decoderen van ‘Bash If Else’-verklaringen

‘Bash if else’-verklaringen zijn hoekstenen in Bash-scripting, die beslissende mogelijkheden bieden voor uw scripts. Het is echter cruciaal om te begrijpen dat het gebruik van ‘if’-verklaringen niet zonder nadelen is.

Het grootste probleem is dat overmatig vertrouwen op ‘if’ je code rommelig kan maken, waardoor het saai en uitdagend wordt, vooral wanneer er meerdere geneste ‘if’-verklaringen in het spel zijn. Dergelijke scripts lopen het risico “spaghetticode” te worden, gekenmerkt door verminderde leesbaarheid en verhoogde complexiteit.

Dus, hoe stroomlijn je je ‘bash if else’ script om begrijpelijk te blijven? Kies voor ‘if else’ verklaringen in plaats van een hoop geneste ‘if’-verklaringen. Het ‘else’ trefwoord biedt het gemak om een codeblok te specificeren dat wordt uitgevoerd als de ‘if’-voorwaarde niet wordt voldaan.

Voor een duidelijker perspectief, overweeg de syntaxis voor ‘Bash If Else’ hieronder, waar:

  • if [[ voorwaarden ]] – Hier omvat de ‘bash if else’ verklaring de code (statement1) die alleen wordt geactiveerd wanneer de opgegeven voorwaarde geldig is.
  • else – Dit maakt deel uit van de ‘bash if else’ structuur. De else-verklaring omvat de code (statement2) die wordt uitgevoerd wanneer de voorwaarde in de voorafgaande if-clausule niet wordt voldaan.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

Stel je voor dat je een eenvoudig ‘bash if else’ spel maakt waarbij het systeem een willekeurig nummer van de gebruiker verwacht:

1. Begin met het maken van een nieuw bestand met de naam bash_if_else_demo.sh.

nano bash_if_else_demo.sh

2. Integreer de volgende ‘bash if else’-code in je bash_if_else_demo.sh bestand, sla de wijzigingen op, en sluit vervolgens af.

De onderliggende ‘bash if else’ code vraagt de gebruiker om hun geluksgetal. Als de invoer even is, wordt het bericht ‘Je hebt gewonnen!’ weergegeven. Daarentegen zorgt een oneven getal voor de uitvoer ‘Je hebt verloren!’.

#!/bin/bash
# Vraagt om het geluksgetal van de gebruiker
echo -n "Input Your Lucky Number:"
# Accepteert het ingevoerde getal.
read var
# 'bash if else'-voorwaarde om te bepalen of de waarde even is.
if [ $((var%2)) == 0 ]; then
 # Meldt een overwinning als aan de voorwaarde is voldaan
 echo "You Won with 'bash if else'!"
else
 # Meldt een verlies als de voorwaarde niet is voldaan
 echo "You Lost using 'bash if else'!"
fi

3. Om het ‘bash if else’-script in actie te zien, voer je de onderstaande opdracht uit:

bash bash_if_else_demo.sh

Na het invoeren van een even getal zou je de melding “Je hebt gewonnen met ‘bash if else’!” moeten zien. Als je daarentegen een oneven getal invoert, zou je de feedback “Je hebt verloren met ‘bash if else’!” moeten krijgen.

Run the ‘bash if else’ game, bash_if_else_demo.sh Script

Om het ‘bash if else’-script te verrijken, overweeg om een segment toe te voegen dat bepaalt of de gebruiker een letter of een ander teken invoert in plaats van een getal.

Decoderen van ‘Bash If Else’ en Case Statements

Op dit punt heb je een paar methoden verkend om beslissingen te nemen in je Bash-scripts, met name ‘bash if else’-verklaringen. Maar Bash biedt nog een andere manier om beslissingen te nemen – de case-verklaring.

Vergelijkbaar met de ‘bash if else’, is de case-verklaring bedreven in het specificeren van code-reeksen die moeten worden uitgevoerd op basis van gespecificeerde voorwaarden. Een opmerkelijk voordeel van de case-verklaring is de eenvoud en duidelijkheid, vooral in vergelijking met geneste ‘bash if else’-scenario’s.

Om volledig grip te krijgen op de alternatieven voor ‘bash if else’, laten we in de syntaxis van de case-verklaring duiken:

  • case $VAR in – Dit gedeelte van de case-structuur evalueert de variabele $VAR tegen gedefinieerde patronen totdat er een overeenkomst is.
  • patroon1) en patroon2) – Dit zijn de criteria waartegen getest wordt, en zodra een overeenkomst is gedetecteerd, wordt de overeenkomstige code (statement1 of statement2) geactiveerd.
  • esac – Beëindigt de case-structuur.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

Stel je voor dat je een ‘bash if else’-script ontwerpt waarin gebruikers hun landnamen invoeren, en als reactie daarop toont het script de overheersende taal van dat land.

1. Begin met het genereren van een bestand met de naam bash_case_demo.sh.

nano bash_case_demo.sh

2. Neem de ‘bash if else’-code hieronder op in je bestand bash_case_demo.sh, sla vervolgens op en sluit af.

Het resulterende ‘bash if else’-script zal de gebruiker vragen naar de naam van hun land en, op basis van de ‘case’-patronen, de primaire taal afdrukken die in het genoemde land wordt gesproken.

3#!/bin/bash
# Ondervraagt de gebruiker over hun land van verblijf
echo -n "In which country do you reside?"
# Legt het antwoord van de gebruiker vast.
read var
# Onthult de standaardtaal in het door de gebruiker geselecteerde land ($var),
# vertrouwend op de patronen binnen het 'case' kader.
echo -n "The official language of $var is "

# Het 'bash if else' case statement evalueert of de input van de gebruiker ($var) overeenkomt met de patronen.
case $var in
# Stel patronen vast die de primaire taal van het door de gebruiker gekozen land onthullen.
 US)
  echo -n "English"
  ;;

 Canada)
  echo -n "English and French"
  ;;

 Algeria | Bahrain | Egypt| Jordan)
  echo -n "Arabic"
  ;;

 *)
  echo -n "unknown"
  ;;
esac

3. Om dit ‘bash if else’ script zelf te ervaren, gebruik de volgende opdracht:

bash bash_case_demo.sh

Je zult merken dat het script nauwkeurig de taal accentueert volgens het door de gebruiker gekozen land.

Als het opgegeven land niet overeenkomt met de opgegeven patronen, wordt het standaard (*) patroon geactiveerd, resulterend in de uitvoer “onbekend.”

Illustrating the functionality of the bash_case_demo.sh Script

Afronding van Bash-voorwaardelijke verklaringen

In deze gids ben je begonnen aan de reis om ‘bash if else’ en andere voorwaardelijke verklaringen in Bash te begrijpen. Van de eenvoudige ‘if’-verklaring tot de ingewikkelde ‘if-else’ en ‘case’-verklaringen, ben je nu uitgerust met essentiële tools voor effectief Bash-scripting.

Met deze fundamenten van ‘bash if else’ in je achterzak kun je Bash-scripts efficiënter construeren, waardoor de kans op fouten wordt verminderd.

Maar onthoud, dit is slechts het topje van de ijsberg. Bash biedt een uitgebreid scala aan voorwaardelijke verklaringen. Overweeg misschien om dieper in te gaan op de Bash elif-verklaring en &&, OR en || operatoren voor diepgaandere inzichten. Met toewijding zal het beheersen van Bash-scripting binnenkort binnen handbereik zijn!

Source:
https://adamtheautomator.com/bash-if-else/