Bash-scripting – If-instructie
Bash is een tolk voor commandotalen. Het is een standaardopdrachtinterpreter op de meeste GNU/ Linux-systemen en is overal beschikbaar op verschillende besturingssystemen. De naam is een afkorting voor Bourne-opnieuw SHell . Scripting maakt het mogelijk instructies uit te voeren die anders één voor één interactief zouden worden uitgevoerd.
In dit artikel zullen we het hebben over de if-instructie in bash-scripting.
Bash If-verklaring
De basissyntaxis van een `if`-instructie in Bash:
#!/bin/bash if [ condition ]; then # code to be executed if the condition is true fi
Uitleg:
-
if [ condition ]; then>: Deze regel begint de if-instructie, waarcondition>is de expressie die wordt geëvalueerd. Als de voorwaarde waar is, wordt de code in hetthen>blok wordt uitgevoerd. -
# code to be executed if the condition is true>: Dit is het codeblok dat wordt uitgevoerd als de voorwaarde die is opgegeven in de if-instructie waar is. -
fi>: Dit markeert het einde van de if-instructie.
Bash-script om te bepalen of een getal even is
Het volgende is een voorbeeld script die u vraagt een getal in te voeren en vervolgens controleert of het opgegeven getal even is.
#!/usr/bin/bash
# Dit script vraagt de gebruiker om een getal in te voeren, controleert of het even is en drukt dienovereenkomstig een bericht af.
# Vraag de gebruiker om een nummer in te voerenecho -n Voer nummer in:
lees x# Controleer of het ingevoerde getal even is
als [ $((x % 2)) == 0 ]; Dan
echo-nummer is even
zijn
Uitleg:
-
#!/usr/bin/bash>: Dit is een regel die het pad naar de Bash-interpreter specificeert. Het geeft aan dat het script moet worden uitgevoerd met Bash. -
echo -n 'Enter Number: '>: op deze regel wordt de prompt Enter Number: afgedrukt zonder een teken voor de nieuwe regel (-n>keuze). Er wordt gewacht tot de gebruiker een nummer invoert. -
read x>: Leest de gebruikersinvoer en wijst deze toe aan de variabelex>. -
if [ $((x % 2)) == 0 ]; then>: Deze regel controleert of de rest van de deling van het ingevoerde getal (x>) met 2 is gelijk aan 0. Als dit waar is, betekent dit dat het getal even is. -
echo 'Number is Even'>: Als de voorwaarde in de if-instructie waar is, wordt met deze regel Number is Even naar de console afgedrukt.
Uitgang:
Bash-script om te bepalen of een getal even is
Opmerking: Het script behandelt geen gevallen waarin de gebruiker een niet-numerieke waarde invoert. Als de gebruiker een niet-numerieke waarde invoert, kan dit onverwachte resultaten opleveren. Om dit aan te pakken kan aanvullende invoervalidatie worden toegevoegd.
Bash if-else-verklaring
De basissyntaxis van een `if-else`-instructie in Bash:
#!/bin/bash
als [voorwaarde]; Dan
# code die moet worden uitgevoerd als de voorwaarde waar is
anders
# code die moet worden uitgevoerd als de voorwaarde onwaar is
zijn
Uitleg:
-
if [ condition ]; then>: Deze regel begint de if-instructie, waarcondition>is de expressie die wordt geëvalueerd. Als de voorwaarde waar is, wordt de code in hetthen>blok wordt uitgevoerd. -
# code to be executed if the condition is true>: Dit is het codeblok dat wordt uitgevoerd als de voorwaarde die is opgegeven in de if-instructie waar is. -
else>: Als de voorwaarde in de if-instructie onwaar is, wordt de code in deelse>blok wordt uitgevoerd. -
# code to be executed if the condition is false>: Dit is het codeblok dat wordt uitgevoerd als de voorwaarde die is opgegeven in de if-instructie onwaar is. -
fi>: Dit markeert het einde van de if-else-instructie.
Hoe vind je het grotere getal met behulp van if-else-instructies in Bash-script?
Hier is het Bash-script om het grotere getal te achterhalen met behulp van de if-else-instructie in Bash Script.
#!/bin/bash
# Vraag de gebruiker om een waarde voor x in te voerenecho -n Voer de waarde van x in:
lees xals [ $x -gt 5 ]; Dan
echo x is groter dan 5
anders
echo x is niet groter dan 5
zijn
Explantatie:
- #!/bin/bash : Deze regel wordt een shebang genoemd en geeft aan dat het script moet worden geïnterpreteerd en uitgevoerd met behulp van de Bash-shell.
- # Vraag de gebruiker om een waarde voor x in te voeren : Dit is een commentaar dat het doel van de volgende regel aangeeft.
- echo -n Voer de waarde van x in: : Deze regel drukt het bericht Voer de waarde van x: in naar de terminal zonder naar de volgende regel te gaan. De gebruiker voert zijn waarde op dezelfde regel in.
- lees x : Deze regel leest de invoer van de gebruiker en wijst deze toe aan de variabele ‘x’.
- als [ $x -gt 5 ]; Dan : Dit is een if-instructie die controleert of de waarde van ‘x’ groter is dan 5.
- $x : vertegenwoordigt de waarde van de variabele ‘x’.
- -gt : Staat voor groter dan in de context van numerieke vergelijking.
- 5 : De waarde waarmee wordt vergeleken.
- echo x is groter dan 5 : Als de voorwaarde in de vorige regel waar is, wordt deze regel uitgevoerd, waarbij x groter dan 5 naar de terminal wordt afgedrukt.
- anders : Als de voorwaarde in de if-instructie onwaar is, springt het script naar het else-blok.
- echo x is niet groter dan 5 : Deze regel wordt uitgevoerd als de waarde van ‘x’ niet groter is dan 5, het afdrukken van x is niet groter dan 5 naar de terminal.
- zijn : Dit betekent het einde van het if-else-blok.
Uitgang:
Een groter getal vinden met behulp van if-else
Bash if-elif-else-verklaring
De if-elif-else> instructie in Bash wordt gebruikt voor voorwaardelijke vertakking. Hiermee kunt u meerdere voorwaarden specificeren en verschillende codeblokken uitvoeren op basis van de evaluatie van deze voorwaarden.
De basissyntaxis van een `if-elif-else`-instructie in Bash:
#!/bin/bash
als [voorwaarde1]; Dan
# Code die moet worden uitgevoerd als voorwaarde1 waar is
elif [voorwaarde2]; Dan
# Code die moet worden uitgevoerd als voorwaarde2 waar is
elif [voorwaarde3]; Dan
# Code die moet worden uitgevoerd als voorwaarde3 waar is
anders
# Code die moet worden uitgevoerd als geen van de voorwaarden waar is
zijn
Uitleg:
- als [voorwaarde1]; Dan : Dit is het startpunt van de
if-elif-else>stelling. De code binnen dit blok wordt uitgevoerd alscondition1>is waar. - # Code die moet worden uitgevoerd als voorwaarde1 waar is : Vervang deze opmerking door de daadwerkelijke code die u wilt uitvoeren als
condition1>is waar. - elif [voorwaarde2]; Dan : Als
condition1>onwaar is, controleert het scriptcondition2>. Alscondition2>waar is, wordt de code binnen dit blok uitgevoerd. - # Code die moet worden uitgevoerd als voorwaarde2 waar is : Vervang deze opmerking door de daadwerkelijke code die u wilt uitvoeren als
condition2>is waar. - elif [voorwaarde3]; Dan : Als beide
condition1>Encondition2>onwaar zijn, controleert het scriptcondition3>. Alscondition3>waar is, wordt de code binnen dit blok uitgevoerd. - # Code die moet worden uitgevoerd als voorwaarde3 waar is : Vervang deze opmerking door de daadwerkelijke code die u wilt uitvoeren als
condition3>is waar. - anders : Als geen van de voorgaande voorwaarden (condition1, condition2, condition3, etc.) waar is, wordt de code binnen de
else>blok wordt uitgevoerd. - # Code die moet worden uitgevoerd als geen van de voorwaarden waar is : Vervang deze opmerking door de daadwerkelijke code die u wilt uitvoeren als geen van de voorwaarden waar is.
- zijn : Dit markeert het einde van de
if-elif-else>stelling. Het woord fi wordt achterstevoren gespeld en wordt gebruikt om de voorwaardelijke blokken in Bash te sluiten.
Hoe kun je achterhalen of het getal positief, negatief of nul is met behulp van de 'if-elif-else'-verklaring in Bash?
Laten we de code in het bovenstaande voorbeeld uitbreiden door de voorwaarde toe te voegen om op nul te controleren.
#!/bin/bash
# Vraag de gebruiker om een nummer in te voeren
echo -n Voer een getal in:
lees nummerif [ $num -gt 0 ]; Dan
echo $num is een positief getal.
elif [ $num -lt 0 ]; Dan
echo $num is een negatief getal.
anders
echo $num is nul.
zijn
Uitleg:
- #!/bin/bash : Deze regel is een shebang die aangeeft dat het script moet worden geïnterpreteerd en uitgevoerd met behulp van de Bash-shell.
- # Vraag de gebruiker om een nummer in te voeren : Dit is een commentaar dat het doel van de volgende regel aangeeft.
- echo -n Voer een getal in: : Deze regel drukt het bericht Voer een nummer in: naar de terminal zonder naar de volgende regel te gaan. De gebruiker voert zijn nummer in op dezelfde regel.
- lees nummer : Deze regel leest de invoer van de gebruiker en wijst deze toe aan de variabele ‘num’.
- if [ $num -gt 0 ]; Dan : Dit is een if-instructie die controleert of de waarde van ‘num’ groter is dan 0.
- $num : vertegenwoordigt de waarde van de variabele ‘num’.
- -gt : Staat voor groter dan in de context van numerieke vergelijking.
- 0 : De waarde waarmee wordt vergeleken.
- echo $num is een positief getal. : Als de voorwaarde in de vorige regel waar is, wordt deze regel uitgevoerd. Het afdrukken van $num is een positief getal. naar de terminal.
- elif [ $num -lt 0 ]; Dan : Als de voorwaarde in de if-instructie onwaar is, controleert deze regel of de waarde van ‘num’ kleiner is dan 0.
- $num : vertegenwoordigt de waarde van de variabele ‘num’.
- -lt : Staat voor minder dan in de context van numerieke vergelijking.
- 0 : De waarde waarmee wordt vergeleken.
- echo $num is een negatief getal. : Als de voorwaarde in het elif-statement waar is, wordt deze regel uitgevoerd, waarbij $num wordt afgedrukt als een negatief getal. naar de terminal.
- anders : Als beide voorwaarden in de if- en elif-instructies onwaar zijn, springt het script naar het else-blok.
- echo $num is nul. : Deze regel wordt uitgevoerd als de waarde van ‘num’ niet groter is dan 0 en niet kleiner dan 0, het afdrukken van $num is nul. naar de terminal.
- zijn : Dit betekent het einde van het if-elif-else-blok.
Uitgang:
als getal positief, negatief of nul is. Gebruik `if-elif-else`
Bash geneste if-instructie
In Bash kun je geneste if> verklaringen om complexere voorwaardelijke structuren te creëren. Hier is de syntaxis voor genest if> stelling:
#!/bin/bash
als [voorwaarde1]; Dan
# Code die moet worden uitgevoerd als voorwaarde1 waar is
als [voorwaarde2]; Dan
# Code die moet worden uitgevoerd als voorwaarde2 waar is
anders
# Code die moet worden uitgevoerd als voorwaarde2 onwaar is
zijn
anders
# Code die moet worden uitgevoerd als voorwaarde1 onwaar is
zijn
Uitleg:
- als [voorwaarde1]; Dan : Dit is de buitenkant
if>stelling. Alscondition1>waar is, wordt de code binnen dit blok uitgevoerd. - # Code die moet worden uitgevoerd als voorwaarde1 waar is : Vervang deze opmerking door de daadwerkelijke code die u wilt uitvoeren als
condition1>is waar. - als [voorwaarde2]; Dan : Binnen het blok van de buitenste
if>verklaring, er is een innerlijkeif>stelling. Alscondition2>waar is, wordt de code binnen dit blok uitgevoerd. - # Code die moet worden uitgevoerd als voorwaarde2 waar is : Vervang deze opmerking door de daadwerkelijke code die u wilt uitvoeren als
condition2>is waar. - anders : Als
condition2>in het binnensteif>statement onwaar is, is de code in hetelse>blok van de binnenkantif>verklaring wordt uitgevoerd. - # Code die moet worden uitgevoerd als voorwaarde2 onwaar is : Vervang deze opmerking door de daadwerkelijke code die u wilt uitvoeren als
condition2>is fout. - zijn : Dit markeert het einde van de binnenkant
if>stelling. - anders : Als
condition1>in de buitensteif>statement onwaar is, is de code in hetelse>blok van de buitenkantif>verklaring wordt uitgevoerd. - # Code die moet worden uitgevoerd als voorwaarde1 onwaar is : Vervang deze opmerking door de daadwerkelijke code die u wilt uitvoeren als
condition1>is fout. - zijn : Dit markeert het einde van de buitenste
if>stelling.
Hoe controleer ik of ik in aanmerking kom voor de leeftijd en de voordelen voor senioren in Bash met behulp van geneste If-verklaringen?
Laten we de bovenstaande code een beetje aanpassen om geneste if te gebruiken.
#!/bin/bash
# Vraag de gebruiker om een leeftijd in te voeren
echo -n Vul je leeftijd in:
lees leeftijdif [ $age -ge 18 ]; Dan
echo U bent stemgerechtigd.
if [ $leeftijd -ge 65 ]; Dan
echo Ook u komt in aanmerking voor een seniorenuitkering.
anders
echo U komt nog niet in aanmerking voor een seniorenuitkering.
zijn
anders
echo U bent nog niet stemgerechtigd.
zijn
Uitleg:
- #!/bin/bash : Deze regel is een shebang die aangeeft dat het script moet worden geïnterpreteerd en uitgevoerd met behulp van de Bash-shell.
- # Vraag de gebruiker om een leeftijd in te voeren : Dit is een commentaar dat het doel van de volgende regel aangeeft.
- echo -n Vul je leeftijd in: : Deze regel drukt het bericht Voer uw leeftijd in: naar de terminal zonder naar de volgende regel te gaan. De gebruiker voert zijn leeftijd in op dezelfde regel.
- lees leeftijd : Deze regel leest de invoer van de gebruiker en wijst deze toe aan de variabele ‘leeftijd’.
- if [ $age -ge 18 ]; Dan : Dit is een if-instructie die controleert of de waarde van ‘leeftijd’ groter is dan of gelijk is aan 18.
- $leeftijd : vertegenwoordigt de waarde van de variabele ‘leeftijd’.
- -ge : Staat voor groter dan of gelijk aan in de context van numerieke vergelijking.
- 18 : De waarde waarmee wordt vergeleken.
- echo U bent stemgerechtigd. : Als de voorwaarde in de vorige regel waar is, wordt deze regel uitgevoerd en wordt afgedrukt. U komt in aanmerking om te stemmen. naar de terminal.
- if [ $leeftijd -ge 65 ]; Dan : Binnen het eerste if-blok is dit een andere if-instructie die controleert of de waarde van ‘leeftijd’ groter is dan of gelijk is aan 65.
- $leeftijd : vertegenwoordigt de waarde van de variabele ‘leeftijd’.
- -ge : Staat voor groter dan of gelijk aan in de context van numerieke vergelijking.
- 65 : De waarde waarmee wordt vergeleken.
- echo Ook u komt in aanmerking voor een seniorenuitkering. : Als de voorwaarde in de binnenste if-verklaring waar is, wordt deze regel uitgevoerd en wordt afgedrukt. U komt ook in aanmerking voor een seniorenuitkering. naar de terminal.
- anders : Als de voorwaarde in de inner if-instructie onwaar is, springt het script naar het else-blok binnen de buitenste if-instructie.
- echo U komt nog niet in aanmerking voor een seniorenuitkering. : Deze regel wordt uitgevoerd als de waarde van ‘leeftijd’ niet groter is dan of gelijk is aan 65. Afdrukken U komt nog niet in aanmerking voor een seniorenuitkering. naar de terminal.
- zijn : Dit betekent het einde van het binnenste if-else-blok.
- anders : Als de voorwaarde in de buitenste if-instructie onwaar is, springt het script naar het else-blok.
- echo U bent nog niet stemgerechtigd. : Deze regel wordt uitgevoerd als de waarde van ‘leeftijd’ niet groter is dan of gelijk is aan 18, afdrukken U komt nog niet in aanmerking om te stemmen. naar de terminal.
- zijn : Dit betekent het einde van het buitenste if-else-blok.
Uitgang:
genest als je Bash gebruikt
Veelgestelde vragen en enkele opmerkingen over CONDITIE
Dit zijn een paar dingen waarmee ik rekening moet houden bij het schrijven van testvoorwaarden in bash.
1. Zorg voor witruimte tussen de haakjes en de feitelijke controle-/vergelijkingsinstructie.
Het volgende zal bijvoorbeeld niet werken.
if [$x==0]Bash zal een fout rapporteren over a missend ] .
2. Beëindig altijd de regel voordat u een nieuw trefwoord toevoegt, zoals toen.
Als, else, elif en fi allemaal shell-trefwoorden zijn, wat betekent dat ze niet op dezelfde regel kunnen worden gebruikt. Zet een ; tussen de vorige verklaring en het trefwoord, of begin een nieuwe regel met het trefwoord.
3. Als u veel voorwaarden in één instructie wilt gebruiken, gebruikt u logische operatoren.
We kunnen logische AND(&&) of logische OR(||) operatoren gebruiken om meerdere voorwaarden te gebruiken.
Bijvoorbeeld:
if [[ $x -ge $y ]] && [[ $x -ge $z ]]; then echo 'x is greatest' fiHier is -ge een afkorting voor groter dan of gelijk aan
4. Hoe tekenreeksen vergelijken in een Bash if-instructie?
Gebruik de ' => `> operator voor tekenreeksgelijkheid en ` !=`> voor ongelijkheid.
Bijvoorbeeld:
if [ '$string1' = '$string2' ]; then # Code to execute if strings are equal else # Code to execute if strings are not equal fi
5. Kan ik reguliere expressies gebruiken in Bash if-instructies?
Ja, u kunt de ` [[ ... ]]`> construct voor geavanceerdere tekenreeksmatching met reguliere expressies.
Bijvoorbeeld:
if [[ '$string' =~ ^[0-9]+$ ]]; then # Code to execute if the string contains only numbers else # Code to execute if the string does not contain only numbers fi
6. Hoe controleer ik of een bestand bestaat in een Bash-script met behulp van een if-statement?
Je kunt de ` -e`> vlag in de voorwaarde, zoals deze:
if [ -e 'filename' ]; then # Code to execute if the file exists else # Code to execute if the file does not exist fi
7. Wat is de syntaxis voor een if-else-instructie in Bash-scripts?
De basissyntaxis voor een `als-anders` statement in Bash-scripting is:
if [ condition ]; then # Code to execute if condition is true else # Code to execute if condition is false fi
8. Hoe gebruik ik de elif-instructie in een Bash-script?
De ` elif`> statement wordt gebruikt om aanvullende voorwaarden te controleren als de initiaal if> voorwaarde is vals.
Hier is een voorbeeld:
if [ condition1 ]; then # Code to execute if condition1 is true elif [ condition2 ]; then # Code to execute if condition2 is true else # Code to execute if none of the conditions are true fi
9. Hoe kan ik logische operatoren (AND, OR) gebruiken in Bash if-instructies?
Je kunt ` -a`> voor logische AND en ` -o`> voor logische OR.
Bijvoorbeeld:
if [ condition1 -a condition2 ]; then # Code to execute if both conditions are true fi
Conclusie
In dit artikel hebben we Bash-scripting besproken, wat een superhandige tool is om je computer dingen automatisch te laten doen. Dit artikel heeft ons geleerd over de if-instructie in Bash, die lijkt op een beslisser in scripts. We leerden de basisprincipes, zagen voorbeelden zoals controleren of een getal even is of uitzoeken of iemand kan stemmen, en verkenden zelfs ingewikkelder zaken, zoals het omgaan met veel voorwaarden of het in elkaar zetten van if-verklaringen. Het artikel gaf duidelijke uitleg, voorbeelden en beantwoordde veelgestelde vragen om ons te helpen beter te worden in het gebruik van Bash-scripts. Het belangrijkste is om voorzichtig te zijn met details zoals spatiëring en speciale regels, zodat onze scripts soepel werken en taken gemakkelijker op de computer kunnen worden uitgevoerd.