Bash Als-Dan-Anders Voorbeeld

Bash If Then Else Example



In deze les zullen we zien hoe we If-Then-Else-instructies kunnen gebruiken in Bash-omgevingsscripts die we schrijven. If-Then-Else-instructies zijn een handig hulpmiddel om een ​​manier te bieden om het actiepad van een script te definiëren wanneer aan bepaalde voorwaarden wordt voldaan. Laten we eens kijken wat de syntaxis is voor If-Then-Else-statements:

indienSOMMIGE-COMMANDO'S;
danDAN-COMMANDO'S;
andersANDERE-COMMANDO'S;
zijn

Als in de bovenstaande opdracht wordt gevonden dat SOME-COMMANDO'S waar zijn of als de retourstatus 0 is, worden de THEN-COMMANDO'S uitgevoerd. Als dit niet het geval is, worden ELSE-COMMANDO's uitgevoerd. In de SOMMIGE-COMMANDO'S doen we meestal een String-vergelijking of waardevergelijking in de vorm van gehele getallen. We kunnen ook veel bewerkingen uitvoeren waarbij bestanden betrokken zijn. Laten we eens kijken naar enkele voorbeelden van primaire commando's die voornamelijk worden gebruikt bij het werken met op bestanden gebaseerde voorwaarden:







primair Betekenis
[ -tot ] Retourneert waar als FILE bestaat.
[-B] Retourneert true wanneer FILE bestaat & een speciaal blokbestand is.
[-C] Retourneert true wanneer FILE bestaat & een speciaal tekenbestand is.
[ -NS ] Retourneert true wanneer FILE bestaat & een directory is.
[ -En ] Retourneert waar als FILE bestaat.
[ -F ] Retourneert true wanneer FILE bestaat en een normaal bestand is.
[ -G ] Retourneert waar wanneer FILE bestaat en zijn SGID-bit is ingesteld.
[ -H ] Retourneert true wanneer FILE bestaat & een symbolische link is.
[-k] Retourneert waar wanneer FILE bestaat en het plakkerige bit is ingesteld.
[ -P ] Retourneert waar wanneer FILE bestaat & een benoemde pijp (FIFO) is.
[ -R ] Retourneert waar wanneer FILE bestaat en leesbaar is.
[ -s ] Retourneert true wanneer FILE bestaat en een grootte heeft die groter is dan nul.
[ -t ] Retourneert true wanneer bestandsdescriptor FD open is en verwijst naar een terminal.
[-u] Retourneert waar wanneer FILE bestaat en zijn SUID (set gebruikers-ID) bit is ingesteld.
[ -in ] Retourneert waar wanneer FILE bestaat en beschrijfbaar is.
[-x] Retourneert waar wanneer FILE bestaat en uitvoerbaar is.
[-O] Retourneert waar wanneer FILE bestaat en eigendom is van de effectieve gebruikers-ID.
[ -G ] Retourneert waar wanneer FILE bestaat en eigendom is van de effectieve groeps-ID.
[ -DE ] Retourneert true wanneer FILE bestaat & een symbolische link is.
[ -N ] Retourneert waar wanneer FILE bestaat en is gewijzigd sinds het voor het laatst is gelezen.
[ -S ] Retourneert waar als FILE bestaat en een socket is.

De THEN-COMMANDO'S en de ELSE-COMMANDO'S kunnen alle geldige UNIX-bewerkingen of elk uitvoerbaar programma zijn. Merk op dat de dan en zijn commando's worden gescheiden door puntkomma's omdat ze worden beschouwd als volledig afzonderlijke elementen van een script.



Eenvoudig voorbeeld als-dan-anders

Laten we onze les beginnen met een heel eenvoudig voorbeeld met als-dan-anders-uitspraken.
Hier is een voorbeeldprogramma:



Als voorbeeld

Als voorbeeld





Dit is de uitvoer die we zien wanneer we ons script uitvoeren:

$. ifelse1.sh
Waarden zijn hetzelfde!
$

Opdrachtregelargumenten gebruiken

We kunnen ook opdrachtregelargumenten gebruiken in onze scripts en het aantal argumenten en de waarden zelf gebruiken als voorwaarde in de IF-instructie die we definiëren. We definiëren eerst een tekstbestand met de volgende inhoud:



Mijn naam is LinuxHint. Ik ben dol op servers, vooral die van Ubuntu. Ze zijn zo
terminaal!

Nu kunnen we een script schrijven dat uitvindt of een woord voorkomt in een tekstbestand of niet. Laten we het script nu definiëren:

gooide uit '1 dollar vinden in $ 2'
greep $ 1 $ 2
indien [ $? -geboren 0 ]
dan
gooide uit '$1 ​​niet gevonden in bestand $2.'
anders
gooide uit '$1 ​​gevonden in bestand $2.'
zijn
gooide uit 'Script voltooid.'

Dit script is erg dynamisch. Het houdt rekening met het te vinden woord en het te zoeken bestand vanaf de opdrachtregel zelf. Nu zijn we klaar om ons script uit te voeren:

. ifelse2.sh graag hallo.txt

We zullen een uitvoer zien zoals:

Liefde vindeninhallo.txt
liefde gevondenin het dossierhallo.txt.
Script voltooid.

Aantal opdrachtregelargumenten controleren

Binnen een IF-instructie kunnen we zelfs controleren hoeveel opdrachtregelargumenten aan de opdracht zijn doorgegeven, zodat we ernaar kunnen handelen:

Graaf=$ #
indien [ ! $tel -gt 1 ]
dan
gooide uit 'Niet genoeg argumenten'
anders
gooide uit 'Goed gedaan!'
zijn

Laten we dit script nu uitvoeren, we zullen de volgende uitvoer zien:

Opdrachtregelargumenten

Opdrachtregelargumenten

Als-Dan-Elif-Anders-verklaringen

We kunnen ook meerdere IF-instructies in hetzelfde blok hebben om het beslissingspad dat ons programma neemt om de door ons gedefinieerde opdrachten uit te voeren, te verfijnen. Hier is de syntaxis om meerdere IF-instructies in onze scripts te definiëren:

indienTEST-COMMANDO'S;
dan
RESULTAAT-COMMANDO'S;
elif
ANDERE-COMMANDO'S;
dan
ANDERE-RESULTAAT-COMMANDO'S;
anders
ALTERNATIEVE-COMMANDO'S;
zijn

Dit ziet er echter vrij bekend uit en is ook gemakkelijk te volgen. Laten we een eenvoudig voorbeeld definiëren om vast te stellen hoe de boom werkt:

Graaf=$ #
indien [ $tel -eq 1 ]
dan
gooide uit 'Slechts één argument gevonden.'
elif [ $tel -eq 2 ]
dan
gooide uit 'Beter, twee argumenten gevonden.'
anders
gooide uit 'Goed gedaan, veel argumenten gevonden!'
zijn

Dit is wat we terugkrijgen met deze opdracht:

Als Dan Elif Else voorbeeld

Als Dan Elif Else voorbeeld

Casusverklaringen gebruiken

IF-ELSE-instructies zijn handig wanneer u een grote lijst met opties hebt waarover u moet beslissen. Maar als u een actie slechts in enkele gevallen van exacte overeenkomst met het resultaat wilt uitvoeren, kunnen we ook CASE-instructies in Bash-scripts gebruiken. De syntaxis ziet er als volgt uit:

gevalUITDRUKKINGinZAAK 1)UIT TE VOEREN COMMANDO'S;
GEVAL2)UIT TE VOEREN COMMANDO'S;
GEVAL2)UIT TE VOEREN COMMANDO'S;
...)UIT TE VOEREN COMMANDO'S;
*)UIT TE VOEREN COMMANDO'S;
esac

Het laatste geval met * fungeert als het standaardgeval en wordt uitgevoerd wanneer geen van de hierboven gedefinieerde gevallen een overeenkomst blijkt te zijn.

Laten we snel een eenvoudig voorbeeld construeren met behulp van de CASE-instructies:

geval '$ 1' in
1)
gooide uit 'Waarde is 1.'
;;
2)
gooide uit 'Waarde is 2.'
;;
3)
gooide uit 'Waarde is 3.'
;;
*)
gooide uit 'Andere waarde doorgegeven.'
esac

Elke CASE-instructie wordt afgesloten met ;; (dubbele puntkomma's). Dit is wat we terugkrijgen met deze opdracht:

CASE voorbeeld

CASE voorbeeld

Conclusie

In deze les hebben we gekeken hoe we IF-ELSE-, IF-THEN-ELIF- en CASE-statements kunnen gebruiken in de Bash-scripts die we definiëren om specifieke acties te ondernemen op basis van waarden die in onze programma's bestaan ​​of die door de gebruiker zijn doorgegeven met behulp van positionele parameters.