Skip to content

Beginnersgids voor BASH – Invoerparameters

29 de juli de 2021
bashtutorial 56a5aaf23df78cf77289544e 5c93ab5646e0fb0001d0a9c9

Welkom bij het 2e deel van de Beginners Guide To BASH-serie, die 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 en hopelijk tegen het einde een aantal behoorlijk slimme scripts kunnen schrijven. De vorige keer hebben we het gehad over het maken van je eerste script dat simpelweg de woorden “Hallo wereld” liet zien. Het behandelt onderwerpen zoals teksteditors, hoe u een terminalvenster opent, waar u uw scripts plaatst, hoe u de woorden “Hello World” weergeeft en enkele fijnere punten op escape-tekens zoals aanhalingstekens (“”). Deze sectie behandelt invoerparameters. Er zijn andere gidsen die dit soort dingen leren, maar maar al te vaak springen ze in op een vrij laag niveau dingen en geven ze misschien te veel informatie.

Een parameterscript voegt personalisatie toe

In het “Hello World”-script van de laatste tutorial was het allemaal erg statisch. Het script deed niet echt veel.

Hoe kunnen we het “Hello World”-script verbeteren?

Hoe zit het met een script dat de persoon begroet die het uitvoert? In plaats van “Hallo wereld” te zeggen, staat er “Hallo Gary”, “Hallo Tim” of “Hallo Dolly”. Zonder de mogelijkheid om invoerparameters te accepteren, zouden we drie scripts “hellogary.sh”, “hellotim.sh” en “hellodolly.sh” moeten schrijven.

Een parameter maken

Door ons script invoerparameters te laten lezen, kunnen we één script gebruiken om iedereen te begroeten. Open hiervoor een terminalvenster (CTRL + ALT + t) en navigeer naar de map met scripts 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 de aanraakopdracht) tik op greetme.sh

Open het script in uw favoriete editor door het volgende te typen: (over nano-opdracht) 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 dan CTRL en x om het bestand te sluiten.

Om het script uit te voeren, voert u het volgende in op de opdrachtregel en vervangt u dit door uw naam. sh greetme.sh Tim

Als ik het script met mijn naam uitvoer, worden de woorden “Hallo Gary” weergegeven.

Linux voert een basisscript uit met parameters

De eerste regel heeft de regel #!/bin/bash die wordt gebruikt om het bestand te identificeren als een bash-script. De tweede regel gebruikt de echo-instructie om het woord hallo te echoën en dan is er de vreemde $@-notatie. (over echo-opdracht) De $@ wordt uitgevouwen om elke parameter weer te geven die is ingevoerd samen met de scriptnaam. Dus als u “sh greetme.sh tim” typt, worden de woorden “hello tim” weergegeven. Als u “greetme.sh tim smith” typt, worden de woorden “hello tim smith” weergegeven.

Echo-opdrachten gebruiken

Het zou leuk zijn als het greetme.sh-script gewoon hallo zegt met alleen de voornaam. Niemand zegt, “Hallo Gary Newell”, wanneer ze iemand ontmoeten, maar ze zouden kunnen zeggen, “Hallo Gary”, dat wel. Laten we het script wijzigen zodat het alleen 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 te drukken CTRL en O en sluit af door op te drukken CTRL en X.

Linux Bash-script met individuele parameter

Voer het script uit zoals hieronder weergegeven (vervang de naam door de uwe): sh greetme.sh gary newell

Wanneer je het script uitvoert, zal het gewoon zeggen: “Hallo Gary” (of hopelijk “hallo” en wat je naam ook is).

Linux voert Bash-script uit met enkele parameter

De 1 achter het $-symbool zegt in feite tegen het echo-commando, gebruik de eerste parameter. Als u de $ 1 vervangt door een $ 2, wordt “hello newell” weergegeven (of wat uw achternaam ook is). Je kunt ook $ 2 toevoegen na $ 1 om de volledige naam te krijgen.

Linux Bash-script met meerdere parameters

Als u het met meer dan één parameter uitvoert, worden ze weergegeven op de plaatsen die overeenkomen met de volgorde waarin ze zijn ingevoerd.

Linux run script met meerdere parameters

Overigens, als je de $2 zou vervangen door een $3 en het script zou uitvoeren met slechts 2 parameters, zou de uitvoer gewoon “Hallo” zijn.

Het aantal gebruikte parameters weergeven

Het is mogelijk om het aantal werkelijk ingevoerde parameters weer te geven en te verwerken, en latere zelfstudies zullen u laten zien hoe u het aantal parameters voor validatiedoeleinden kunt gebruiken. Om het aantal ingevoerde parameters weer te geven, opent u het greetme.sh-script (nano greetme.sh) en wijzigt u de tekst als volgt: #!/bin/bash
echo “je hebt $# namen ingevoerd”
echo “hallo $@”

druk op CTRL en O om het script op te slaan en CTRL en x om nano te verlaten.

Parameters voor het tellen van Linux Bash-scripts

De $# op de 2e regel geeft het aantal ingevoerde parameters weer. Tot nu toe was dit allemaal nieuw, maar niet erg nuttig. Wie heeft er een script nodig dat simpelweg “hallo” weergeeft?

Linux run bash script telparameters

Echo-statements versus invoerparameters

Het echte gebruik van echo-statements is om de gebruiker uitgebreide en zinvolle uitvoer te bieden. Als je je kunt voorstellen dat je iets ingewikkelds wilt doen, waarbij je serieus moet gaan puzzelen en bestanden/mappen moet manipuleren, zou het handig zijn om de gebruiker te laten zien wat er bij elke stap gebeurt. Invoerparameters daarentegen maken uw script interactief. Zonder invoerparameters zou je tientallen scripts nodig hebben die allemaal zeer vergelijkbare dingen doen, maar met iets andere namen. Met dit alles in gedachten, zijn er enkele andere nuttige invoerparameters waarvan het een goed idee is om ze te kennen en ik zal ze allemaal in één codefragment opnemen. Open je greetme.sh-script en wijzig het als volgt: #!/bin/bash
echo “Bestandsnaam: $0”
echo “Proces-ID: $$”
echo “——————————-“
echo “je hebt $# namen ingevoerd”
echo “hallo $@”

druk op CTRL en O om het bestand op te slaan en CTRL en x verlaten.

Linux Bash-script aanvullende informatie

Voer nu het script uit (vervang dit door uw naam). sh greetme.sh

Deze keer geeft het script het volgende weer: Bestandsnaam: greetme.sh
Proces-ID: 18595
——————————
je hebt 2 namen ingevoerd
hallo gary newell

Linux Bash run-script met extra info

De $0 op de eerste regel van het script geeft de naam weer van het script dat u uitvoert. 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 uitvoert. Waarom is dit handig? Als u een script op de voorgrond uitvoert, kunt u dit annuleren door simpelweg op . te drukken CTRL en C. Als je het script op de achtergrond uitvoerde en het begon in een lus te lopen en steeds weer hetzelfde te doen, of het begon schade aan je systeem te veroorzaken, zou je het moeten doden. Om een ​​script dat op de achtergrond draait te doden, heb je de proces-ID van het script nodig. Zou het niet goed zijn als het script het proces-ID meegaf als onderdeel van de uitvoer? (over ps en kill-commando’s)

Inpakken…

Tot slot, voordat we eindigen met dit onderwerp, is het belangrijk om te bespreken waar de uitvoer 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. Voer hiervoor uw script als volgt uit: sh greetme.sh gary > greetme.log

Het > symbool in de bovenstaande opdracht voert de tekst “hello gary” uit naar een bestand met de naam greetme.log. Elke keer dat u het script uitvoert met het >-symbool, wordt de inhoud van het uitvoerbestand overschreven. Als u liever aan het bestand wilt toevoegen, vervangt u de > door >>. U zou nu tekst naar het scherm moeten kunnen schrijven en invoerparameters moeten accepteren.