Begynderguide til BASH

Velkommen til 2. del af Beginners Guide To BASH-serien, som er unik ved, at det er den eneste BASH-tutorial skrevet af en begynder for begyndere.

Læsere af denne guide vil opbygge deres viden og vil forhåbentlig til sidst være i stand til at skrive nogle ret smarte scripts.

Sidste gang vi dækkede oprettelse af dit første script som blot viste ordene "Hello World". Det dækker emner som teksteditorer, hvordan man åbner et terminalvindue, hvor man placerer sine scripts, hvordan man viser ordene "Hello World" og nogle finere punkter på escape-tegn såsom citater ("").

Dette afsnit dækker inputparametre. Der er andre guider som underviser i den slags, men alt for ofte springer de ud i noget ret lavt niveau og giver måske for meget information.

Et parameterscript tilføjer personalisering

I "Hello World"-scriptet fra den sidste tutorial var det hele meget statisk. Manuskriptet gjorde egentlig ikke meget.

Hvordan kan vi forbedre "Hello World"-scriptet?

Hvad med et script, der hilser den person, der kører det? I stedet for at sige "Hello World" vil der stå "Hej Gary", "Hello Tim" eller "Hello Dolly".

Uden evnen til at acceptere inputparametre ville vi skulle skrive tre scripts "hellogary.sh", "hellotim.sh" og "hellodolly.sh".

Sådan opretter du en parameter

Ved at tillade vores script at læse input-parametre, kan vi bruge ét script til at hilse på enhver.

For at gøre dette skal du åbne et terminalvindue (CTRL + ALT + T) og naviger til din scripts-mappe ved at skrive følgende: (om cd kommando)

cd scripts

Opret et nyt script kaldet greetme.sh ved at skrive følgende: (om berøringskommando)

berør greetme.sh

Åbn scriptet i din yndlingseditor ved at skrive følgende: (om nano-kommando)

nano greetme.sh

Indtast følgende tekst i nano:

#!/bin/bash
ekko "hej $@"

Trykke CTRL og O for at gemme filen og derefter CTRL og x for at lukke filen.

Linux grundlæggende Bash-script med parametre

For at køre scriptet skal du indtaste følgende på kommandolinjen og erstatte med dit navn.

sh greetme.sh Tim

Hvis jeg kører scriptet med mit navn, viser det ordene "Hej Gary".

Linux kører grundlæggende script med parametre

Den første linje har #!/bin/bash-linjen, som bruges til at identificere filen som et bash-script.

Den anden linje bruger ekko-sætningen til at gentage ordet hej, og så er der den mærkelige $@-notation. (om ekkokommando)

$@ udvides for at vise hver parameter, der blev indtastet sammen med scriptnavnet. Så hvis du skrev "sh greetme.sh tim" ville ordene "hello tim" blive vist. Hvis du skrev "greetme.sh tim smith", så ville ordene "hello tim smith" blive vist.

Brug af ekkokommandoer

Det kunne være rart for greetme.sh-scriptet bare at sige hej med kun fornavnet. Ingen siger, "Hej Gary Newell," når de møder nogen, men de siger måske, "Hej Gary," selvom.

Lad os ændre scriptet, så det kun bruger den første parameter. Åbn greetme.sh-scriptet i nano ved at skrive følgende:

nano greetme.sh

Skift scriptet, så det lyder som følger:

#!/bin/bash
ekko "hej $1"

Gem scriptet ved at trykke på CTRL og O og forlad derefter ved at trykke på CTRL og X.

Linux Bash script med individuelle parameter

Kør scriptet som vist nedenfor (erstat navnet med dit):

sh greetme.sh gary newell

Når du kører scriptet vil det blot sige "Hej Gary" (eller forhåbentlig "hej" og hvad du nu hedder).

Linux køre Bash script med enkelt parameter

1'eren efter $-symbolet siger grundlæggende til ekkokommandoen, brug den første parameter. Hvis du erstatter $1 med en $2, vil den vise "hello newell" (eller hvad dit efternavn er). Du kan også tilføje $2 efter $1 for at få det fulde navn.

Linux Bash script med flere parametre

Hvis du kører det med mere end én parameter, vises dem på de steder, der svarer til den rækkefølge, de blev indtastet.

Linux køre script med flere parametre

I øvrigt, hvis du erstattede $2 med en $3 og kørte scriptet med kun 2 parametre, ville output simpelthen være "Hej".

Sådan viser du antallet af brugte parametre

Det er muligt at vise og håndtere antallet af faktisk indtastede parametre, og senere tutorials vil vise dig, hvordan du bruger parametertællingen til valideringsformål.

For at få vist antallet af indtastede parametre skal du åbne greetme.sh-scriptet (nano greetme.sh) og ændre teksten som følger:

#!/bin/bash
ekko "du indtastede $# navne"
ekko "hej $@"

Trykke CTRL og O for at gemme scriptet og CTRL og x for at afslutte nano.

Linux Bash script antal parametre

$# på 2. linje viser antallet af indtastede parametre.

Hidtil har alt dette været nyt, men ikke særlig nyttigt. Hvem har brug for et script, der blot viser "hej"?

Linux køre bash script optælling parametre

Echo Statements vs. Indtastningsparametre

Den virkelige brug for ekko-udsagn er at give brugeren et omfattende og meningsfuldt output. Hvis du kan forestille dig, at du ønsker at gøre noget kompliceret, som involverer nogle alvorlige tal knasende og fil-/mappemanipulation, ville det være nyttigt at vise brugeren, hvad der sker i hvert trin i vej.

I modsætning hertil gør inputparametre dit script interaktivt. Uden inputparametre ville du have brug for snesevis af scripts, der alle laver meget lignende ting, men med lidt forskellige navne.

Med alt dette i tankerne er der nogle andre nyttige inputparametre, som det er en god idé at kende, og jeg vil inkludere dem alle i et kodestykke.

Åbn dit greetme.sh-script og rediger det som følger:

#!/bin/bash
echo "Filnavn: $0"
echo "Proces ID: $$"
ekko ""
ekko "du indtastede $# navne"
ekko "hej $@"

Trykke CTRL og O for at gemme filen og CTRL og x At forlade.

Linux Bash script yderligere information

Kør nu scriptet (erstat med dit navn).

sh greetme.sh 

Denne gang viser scriptet følgende:

Filnavn: greetme.sh
Proces-id: 18595

du indtastede 2 navne
hej gary newell
Linux Bash køre script med yderligere info

$0 på den første linje af scriptet viser navnet på det script, du kører. Bemærk, at det er dollar nul og ikke dollar o.

$$ på den anden linje viser proces-id'et for det script, du kører. Hvorfor er dette nyttigt? Hvis du kører et script i forgrunden, kan du annullere det ved blot at trykke på CTRL og C. Hvis du kørte scriptet i baggrunden, og det begyndte at loope og gøre det samme igen og igen eller begyndte at forårsage skade på dit system, ville du være nødt til at dræbe det.

For at dræbe et script, der kører i baggrunden, skal du bruge scriptets proces-id. Ville det ikke være godt, hvis scriptet gav proces-id'et som en del af dets output? (om ps og kill-kommandoer)

At afslutte...

Til sidst, før vi slutter af med dette emne, er det vigtigt at diskutere, hvor outputtet går hen. Hver gang scriptet har kørt indtil videre, er outputtet blevet vist på skærmen.

Det er ret almindeligt, at scriptoutput skrives til en outputfil. For at gøre dette skal du køre dit script som følger:

sh greetme.sh gary > greetme.log

>-symbolet i ovenstående kommando udsender teksten "hello gary" til en fil kaldet greetme.log.

Hver gang du kører scriptet med >-symbolet, overskriver det indholdet af outputfilen. Hvis du foretrækker at tilføje til filen, skal du erstatte > med >>.

Du skulle nu være i stand til at skrive tekst til skærmen og acceptere inputparametre.