Welkom bij het 2e deel van de Beginners Guide to BASH-serie, wat uniek is omdat het de enige BASH-tutorial is die door een beginner voor beginners is geschreven.
Lezers van deze gids zullen hun kennis opbouwen naarmate ik mijn kennis opbouw en hopelijk zullen we aan het einde van dit alles enkele behoorlijk slimme scripts kunnen schrijven.
Vorige week heb ik het maken van je eerste script besproken waarin simpelweg de woorden "Hallo wereld" stonden. Het behandelt onderwerpen zoals teksteditors, hoe u een terminalvenster opent, waar u uw scripts kunt plaatsen, hoe u de woorden "Hello World" en enkele fijne punten op escape-tekens zoals quotes ("") kunt weergeven.
Deze week ga ik invoerparameters behandelen. Er zijn andere gidsen die dit soort dingen leren, maar ik merk dat ze op dingen van een redelijk laag niveau springen en misschien te veel informatie geven.
Wat is een parameter?
In het script "Hello World" van de laatste zelfstudie was het allemaal erg statisch. Het script deed niet echt veel.
Hoe kunnen we het script "Hello World" verbeteren?
Hoe zit het met een script dat de persoon die het beheert, begroet? In plaats van 'Hallo wereld' te zeggen, wordt 'Hallo Gary', 'Hallo Tim' of 'Hallo Dolly' gezegd.
Zonder de mogelijkheid om invoerparameters te accepteren, zouden we drie scripts "hellogary.sh", "hellotim.sh" en "hellodolly.sh" moeten schrijven.
Door ons script invoerparameters te laten lezen kunnen we één script gebruiken om iemand te groeten.
Open hiervoor een terminalvenster (CTRL + ALT + T) en navigeer naar uw scriptmap door het volgende te typen: (over cd-opdracht)
cd-scripts
Maak een nieuw script met de naam greetme.sh door het volgende te typen: (over touch-opdracht)
raak greetme.sh aan
Open het script in je favoriete editor door het volgende te typen: (over opdracht nano)
nano greetme.sh
Voer de volgende tekst in binnen nano:
#! / bin / bash echo "hallo $ @"
Druk op CTRL en O om het bestand op te slaan en vervolgens op CTRL en X om het bestand te sluiten.
Voer het volgende in de opdrachtregel in ter vervanging van uw naam om het script uit te voeren.
sh greetme.sh
Als ik het script met mijn naam voer, toont het de woorden "Hallo Gary".
De eerste regel heeft de regel #! / Bin / bash die wordt gebruikt om het bestand te identificeren als bash-script.
De tweede regel gebruikt de echo-instructie om het woord hallo weer te geven en dan is er de vreemde $ @ -notatie. (over echo commando)
De $ @ wordt uitgevouwen om elke parameter weer te geven die is ingevoerd samen met de scriptnaam. Dus als u "sh greetme.sh tim" heeft getypt, worden de woorden "hallo tim" weergegeven. Als u "greetme.sh tim smith" heeft getypt, worden de woorden "hallo tim smith" weergegeven.
Het is misschien leuk voor het greetme.sh-script om alleen hallo te zeggen met alleen de voornaam. Niemand zegt "hallo griezelig nieuweling" wanneer ze me ontmoeten, ze kunnen echter wel "hallo gary" zeggen.
Laten we het script zo veranderen dat het gewoon de eerste parameter gebruikt. Open het greetme.sh-script in nano door het volgende te typen:
nano greetme.sh
Wijzig het script zodat het als volgt luidt:
#! / bin / bash echo "hallo $ 1"
Sla het script op door op CTRL en O te drukken en verlaat het script door op CTRL en X te drukken.
Voer het script uit zoals hieronder weergegeven (vervang mijn naam door de uwe):
sh greetme.sh gary newell
Wanneer u het script uitvoert, zegt het eenvoudig "hallo gary" (of hopelijk "hallo" en wat uw naam ook is.
De 1 na het $ -symbool zegt in principe tegen de echo-opdracht, gebruik de eerste parameter. Als u de $ 1 vervangt door een $ 2, wordt 'hallo nieuweling' weergegeven (of wat uw achternaam ook is).
Overigens als je de $ 2 met een $ 3 verving en het script met slechts 2 parameters uitvoerde, zou de uitvoer eenvoudig "Hallo" zijn.
Het is mogelijk om het aantal werkelijk ingevoerde parameters weer te geven en af te handelen en in latere tutorials zal ik laten zien hoe het parameternummer moet worden gebruikt voor validatiedoeleinden.
Om het aantal ingevoerde parameters te openen, opent u het greetme.sh-script (nano greetme.sh) en wijzigt u de tekst als volgt:
#! / bin / bash echo "u heeft $ # namen ingevoerd" echo "hallo $ @"
Druk op CTRL en O om het script op te slaan en CTRL en X om nano af te sluiten.
De $ # op de 2e regel geeft het aantal ingevoerde parameters weer.
Tot nu toe is dit alles nieuw maar niet erg nuttig geweest. Wie heeft een script nodig dat eenvoudig 'hallo' laat zien?
Het echte gebruik voor echo-uitspraken is om uitvoerige en zinvolle uitvoer aan de gebruiker te bieden. Als je je kunt voorstellen dat je iets ingewikkelds wilt doen, wat een serieus aantal crunching en bestands- / mapmanipulatie inhoudt, zou het handig zijn om aan de gebruiker te laten zien wat er in elke stap gebeurt.
Invoerparameters daarentegen maken uw script interactief. Zonder invoerparameters zou je tientallen scripts nodig hebben die allemaal heel vergelijkbare dingen doen, maar met iets andere namen.
Met dit alles in gedachten zijn er een aantal andere nuttige invoerparameters dat het een goed idee is om te weten en ik zal ze allemaal in één codefragment opnemen.
Open uw greetme.sh-script en wijzig dit als volgt:
#! / bin / bash echo "Bestandsnaam: $ 0" echo "Proces-ID: $$" echo "---------------------------- --- "echo" u heeft $ # namen "echo" hallo $ @ ingevoerd "
Druk op CTRL en O om het bestand op te slaan en CTRL en X om af te sluiten.
Voer nu het script uit (vervang door uw naam).
sh greetme.sh
Deze keer toont het script het volgende:
Bestandsnaam: greetme.sh Proces-ID: 18595 ------------------------------ u heeft 2 namen ingevoerd hallo gary newell
De $ 0 op de eerste regel van het script toont de naam van het script dat u gebruikt.Merk op dat het dollar nul is en niet dollar o.
De $$ op de tweede regel geeft de proces-id weer van het script dat u gebruikt. Waarom is dit nuttig? Als u een script op de voorgrond uitvoert, kunt u dit annuleren door eenvoudig op CTRL en C te drukken. Als u het script op de achtergrond uitvoert en het begint te herhalen en steeds hetzelfde doet of schade veroorzaakt aan uw systeem, hebt u om het te doden.
Als u een script op de achtergrond wilt doden, hebt u de proces-ID van het script nodig. Zou het niet goed zijn als het script het proces-id als onderdeel van zijn uitvoer zou geven. (over ps en kill-commando's)
Eindelijk voordat ik klaar ben met dit onderwerp wilde ik bespreken waar de output naartoe gaat. Elke keer dat het script tot nu toe is uitgevoerd, is de uitvoer op het scherm weergegeven.
Het is vrij gebruikelijk dat scriptuitvoer naar een uitvoerbestand wordt geschreven. Om dit te doen voer je het script als volgt uit:
sh greetme.sh gary> greetme.log
Het> -symbool in de bovenstaande opdracht voert de tekst "hallo gary" uit naar een bestand met de naam greetme.log.
Telkens wanneer u het script uitvoert met het> -symbool, wordt de inhoud van het uitvoerbestand overschreven. Als u liever aan het bestand toevoegt, vervangt u de> met >>.
Samenvatting
U zou nu in staat moeten zijn om tekst naar het scherm te schrijven en invoerparameters te accepteren.