Om te beginnen - laten we die kop verduidelijken. Linux heeft meer dan één mogelijke shell en het scripten van een van deze is een onderwerp dat gemakkelijk een volledig boek kan inpakken. Wat we gaan doen is de basiselementen van een bash- script behandelen. Als je niet weet welke shell je gebruikt, is het waarschijnlijk bash . Het proces zal bekend zijn bij iedereen die met de bat- bestanden van DOS heeft gewerkt, het is in essentie hetzelfde concept. U plaatst gewoon een reeks opdrachten in een tekstbestand en voert het uit. Het verschil komt van het feit dat bash-scripts VEEL meer kunnen doen dan batchbestanden. In feite is bash-scripting niet zo ver verwijderd van een volwaardige taal als Python. Vandaag behandelen we enkele basisbegrippen zoals invoer, uitvoer, argumenten en variabelen.

Opmerking : als we echt technisch willen worden, is bash geen Linux-only shell. Veel (maar misschien niet alle) van de volgende punten zouden van toepassing zijn op elk systeem van het UNIX-type, inclusief Mac OSX en de BSD's.

Hallo Wereld

Het is traditie om een ​​nieuwe "taal" te beginnen door een eenvoudig script te maken om de woorden "Hallo wereld!" Uit te voeren. Dat is gemakkelijk genoeg, open gewoon je favoriete teksteditor en voer het volgende in:

 #! / bin / bash echo Hallo wereld! 

Met slechts twee regels zou het niet veel eenvoudiger kunnen zijn, maar die eerste regel, #! / Bin / bash, is misschien niet meteen duidelijk. De eerste twee karakters (vaak een hashbang genoemd) zijn een speciaal signaal. Het vertelt Linux dat dit script door de / bin / bash-shell moet lopen, in tegenstelling tot de C-shell of Korn-shell of iets anders dat je misschien hebt geïnstalleerd. Zonder dit is er geen gemakkelijke manier voor Linux om precies te weten welk type shell-script dit is. Een Python-script zou bijvoorbeeld waarschijnlijk beginnen met iets als #! / Usr / bin / python .

Hierna is alleen de echo- instructie, die de woorden erna print naar de terminal (technisch, naar standaarduitvoer ).

Uw script uitvoeren

Zoals vaak het geval is met Linux, zijn er meerdere manieren om deze klus te klaren. De meest basale manier zou zijn om bash handmatig te bellen en het scriptbestand, zoals in, te voeden

 #Filename kan van alles zijn, .sh is een gangbare praktijk voor shellscripts. bash myscript.sh 

Slimme lezers denken misschien: " Maar wacht even, hebben we dat hashbang ding niet in gedaan zodat het zou weten om bash te gebruiken? Waarom moest ik bash handmatig uitvoeren? En het antwoord is: " Jij niet ". Tenminste, dat zou je niet hebben als we een moment hadden genomen om het script op zichzelf uitvoerbaar te maken.

In het vorige voorbeeld hebben we bash gelanceerd en het script verzonden. Nu gaan we onszelf wat toekomstige tijd besparen door het script uitvoerbaar te maken, zodat we bash niet handmatig hoeven uit te voeren. Dat is net zo eenvoudig als een enkele opdracht.

 chmod + x myscript.sh 

En nu kan het direct met de bestandsnaam worden uitgevoerd.

Variabelen en argumenten

Variabelen in bash kunnen iets meer verwarrend zijn dan sommige andere scriptingtalen, deels omdat ze soms moeten worden voorafgegaan door een $ -teken en soms niet-afhankelijk van wat je doet. Neem het volgende voorbeeld.

 PATH = $ PATH: / home / josh / scripts 

We verwijzen naar dezelfde variabele, PATH, twee keer. Zodra er geen $ is, maar de andere keer dat er is. Er zijn een paar manieren die je kunt onthouden wanneer een $ geschikt is, maar deze auteur gebruikt een 'sprekende' metafoor. Als ik met de variabele praat (zoals het een nieuwe waarde toewijzen), noem ik dit bij de korte naam, in dit geval PATH. Als ik het heb over een variabele (zoals de huidige waarde krijgen), krijgt deze een meer formele titel ($ PATH). De precieze redenering en innerlijke werking van dit ontwerp vallen buiten het bestek van deze handleiding, dus probeer alleen te onthouden dat u een $ moet opnemen als u probeert de informatie in een variabele op te halen.

Nu gaan we een variabele gebruiken in ons script. Verander de tweede regel om er als volgt uit te zien:

 #! / bin / bash echo Hallo $ 1! 

En voer uw script opnieuw uit, maar deze keer bevat uw naam achter de naam van het script.

Bash kent automatisch bepaalde variabelen voor u toe, waaronder enkele zoals $ 1, $ 2 enz. Die elk van de argumenten bevatten die aan het script zijn doorgegeven. Variabelen kunnen opnieuw worden toegewezen en hernoemd op elke gewenste manier, zodat je het vorige script als volgt kunt herschrijven

 #! / bin / bash firstname = $ 1 achternaam = $ 2 echo Hallo $ voornaam $ achternaam! 

Zoals je ziet, zijn er geen $ signs bij het toekennen van de waarde aan de variabele, maar je hebt ze wel nodig als je de info eruit haalt.

Conditionals en loops

Geen script kan ver komen zonder de mogelijkheid om gegevens te analyseren of door te lussen. De meest gebruikelijke methode om een ​​koers te bepalen, is door de instructie if te gebruiken. Het werkt net zoals je zou verwachten - ALS iets DAN anders iets doet, doe dan iets anders. Dit voorbeeld vergelijkt de reeks tekens die we in de voornaam van de variabele hebben opgeslagen en vergelijkt deze met een aantal hard gecodeerde tekst. Als ze overeenkomen, wordt speciale uitvoer afgedrukt. Anders gaat het gewoon door.

 #! / bin / bash firstname = $ 1 achternaam = $ 2 als ["$ voornaam" == "Josh"] echo "Wat een geweldige naam" anders echo Hello $ voornaam $ achternaam! fi 

Ten slotte is de volgende kerncomponent het vermogen van bash om gegevens over te dragen. De normale lusmechanismen voor bash zijn FOR, WHILE en UNTIL. We beginnen met terwijl, omdat het de eenvoudigste is.

 #! / bin / bash-teller = 0 #Terwijl de teller kleiner is dan 10, blijft u lussen houden terwijl [$ counter -lt 50]; doe echo $ teller laat teller = teller + 1 gedaan 

In dat voorbeeld wordt een tellervariabele gemaakt, wordt een while- lus gestart en wordt de lus voortgezet (en er één aan de teller toegevoegd) totdat deze de limiet bereikt, in dit geval 50. Alles na de voltooide instructie wordt uitgevoerd zodra de lus is voltooid.

UNTIL werkt op dezelfde manier, maar als het omgekeerde van WHILE. Een while-lus gaat door zolang de expressie waar is (teller minder dan 50). De while-lus neemt de tegenovergestelde benadering aan, en zou worden geschreven als

 tot [$ counter -gt 50]; do 

In dit voorbeeld hebben "terwijl minder dan 50" en "tot meer dan 50" bijna identieke resultaten (het verschil is dat het getal 50 zelf wordt opgenomen en het andere niet.) Probeer het zelf uit om te zien welke, en waarom.)

Conclusie

Zoals hierboven vermeld, zou het veel meer kosten dan een enkel artikel Aan de slag om de kracht van bash-scripting volledig te demonstreren. De hier getoonde werken kunnen worden gezien als de kerncomponenten van hoe bash werkt, en zouden voldoende moeten zijn om u de basisprincipes achter shell-scripting in Linux te tonen. Als je echt zin hebt om een ​​paar geweldige scripts te maken, bekijk dan hier de officiële bash-naslaggids van GNU. Happy scripting!