Velkommen til 2. del af Beginners Guide til BASH-serien, som er unik, fordi det er den eneste BASH-tutorial skrevet af en nybegynder til begyndere.
Læsere af denne vejledning vil opbygge deres viden, da jeg opbygger min viden og forhåbentlig i slutningen af det hele vil vi kunne skrive nogle ret kloge scripts.
I sidste uge dækkede jeg at oprette dit første script, der blot viste ordene "Hello World". Det dækker emner som tekstredaktører, hvordan man åbner et terminalvindue, hvor man skal sætte dine scripts, hvordan man viser ordene "Hello World" og nogle finere punkter på escape-tegn som citater ("").
I denne uge skal jeg dække indgangsparametre. Der er andre hjælpelinjer, der lærer denne slags ting, men jeg finder, at de hopper ind i nogle forholdsvis lave niveauer og måske giver for meget information.
Hvad er en parameter?
I "Hello World" -skriptet fra den sidste vejledning var det alle meget statiske. Scriptet gjorde slet ikke meget.
Hvordan kunne vi forbedre på "Hello World" scriptet?
Hvad med et script, der hilser den person, der kører det? I stedet for at sige "Hello World" vil det sige "Hello Gary", "Hello Tim" eller "Hello Dolly".
Uden evnen til at acceptere inputparametre skulle vi skrive tre scripts "hellogary.sh", "hellotim.sh" og "hellodolly.sh".
Ved at tillade vores script at læse input parametre kan vi bruge et script til at hilse på nogen.
For at gøre dette åbner du et terminalvindue (CTRL + ALT + T) og navigerer til din script-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)
touch greetme.sh
Åbn scriptet i dit yndlingsredaktør ved at skrive følgende: (om nano-kommando)
nano greetme.sh
Indtast følgende tekst inden for nano:
#! / bin / bash echo "hej $ @"
Tryk på CTRL og O for at gemme filen og derefter CTRL og X for at lukke filen.
For at køre scriptet indtast følgende i kommandolinjen, der erstatter med dit navn.
sh greetme.sh
Hvis jeg kører scriptet med mit navn, vises ordene "Hello Gary".
Den første linje har linjen #! / Bin / bash, som bruges til at identificere filen som et bash script.
Den anden linje bruger ekko-sætningen til at ekko ordet hej, og så er der den mærkelige $ @ notation. (om ekkokommando)
$ @ Udvider for at vise alle parametre, der blev indtastet sammen med scriptnavnet. Så hvis du skrev "sh greetme.sh tim" vil ordene "hej tim" blive vist. Hvis du skrev "greetme.sh tim smith" så vil ordene "hej tim smith" blive vist.
Det kan være godt for greetme.sh scriptet at bare sige hej med bare fornavnet. Ingen siger "Hej Gary Newell", når de møder mig, kan de måske sige "Hej Gary".
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 echo "hej $ 1"
Gem scriptet ved at trykke på CTRL og O og derefter afslutte ved at trykke på CTRL og X.
Kør scriptet som vist nedenfor (erstat mit navn med din):
sh greetme.sh gary newell
Når du kører scriptet, vil det blot sige "hej gary" (eller forhåbentlig "hej" og uanset dit navn.
1 efter $ symbolet siger i grunden til ekkokommandoen, brug den første parameter. Hvis du erstatter $ 1 med en $ 2 så vil det vise "hej newell" (eller hvad dit efternavn er).
I tilfælde af at du erstattede $ 2 med en $ 3 og kørte scriptet med kun 2 parametre, ville output simpelthen være "Hej".
Det er muligt at vise og håndtere antallet af parametre, der faktisk er indtastet, og i senere tutorials vil jeg vise, hvordan man bruger parametertællingen til valideringsformål.
For at vise antallet af indtastede parametre skal du åbne greetme.sh scriptet (nano greetme.sh) og ændre teksten som følger:
#! / bin / bash echo "du indtastede $ # navne" echo "hej $ @"
Tryk på CTRL og O for at gemme scriptet og CTRL og X for at afslutte nano.
$ # På 2. linje viser antallet af indtastede parametre.
Hidtil har alt dette været nyt, men ikke meget nyttigt. Hvem har brug for et script, der simpelthen viser "hej"?
Den egentlige brug for ekko-erklæringer er at levere verbose og meningsfuld output til brugeren. Hvis du kan forestille dig, at du vil gøre noget kompliceret, hvilket indebærer en seriøs nummerknusning og fil- / mappemanipulation, ville det være nyttigt at vise brugeren, hvad der sker i hvert trin af vejen.
Derimod gør inputparametre dit script interaktivt. Uden input parametre ville du brug for snesevis af scripts alle gør meget lignende ting, men med lidt forskellige navne.
Med alt dette i tankerne er der nogle andre nyttige inputparametre, som det er en god ide at vide, og jeg vil inkludere dem alle i et kodestykke.
Åbn dit greetme.sh script og ændre det som følger:
#! / bin / bash echo "Filnavn: $ 0" echo "Proces ID: $$" echo "---------------------------- --- "echo" du indtastede $ # navne "echo" hej $ @ "
Tryk på CTRL og O for at gemme filen og CTRL og X for at afslutte.
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
$ 0 på første linje i 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'en for scriptet, du kører. Hvorfor er det 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 startede looping og gør det samme igen og igen eller begyndte at forårsage skade på dit system, ville du have brug for 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 som en del af dets output. (om ps og kill kommandoer)
Endelig, inden jeg er færdig med dette emne, ønskede jeg at diskutere, hvor produktionen går. Hver gang scriptet har kørt hidtil, er output vist på skærmen.
Det er ret almindeligt, at script output skal skrives til en output fil. For at gøre dette køre dit script som følger:
sh greetme.sh gary> greetme.log
Symbolet> i ovennævnte kommando udsender teksten "hallo gary" til en fil kaldet greetme.log.
Hver gang du kører scriptet med symbolet> overskrives indholdet af outputfilen. Hvis du foretrækker at føje til filen, skal du erstatte> med >>.
Resumé
Du skal nu kunne skrive tekst til skærmen og acceptere inputparametre.