Beginnersgids na BASH - Insetparameters

Welkom by die 2de deel van die Beginnersgids na BASH-reeks, wat uniek is omdat dit die enigste BASH-tutoriaal is wat deur 'n beginner vir beginners geskryf is.

Lesers van hierdie gids sal hul kennis opbou, aangesien ek my kennis opbou en hopelik teen die einde daarvan sal ons 'n paar redelik slim skrifte kan skryf.

Verlede week het ek gedink om jou eerste skrif te skep wat net die woorde "Hello World" vertoon. Dit dek vakke soos teksredakteurs, hoe om 'n terminaal venster oop te maak, waar om jou skrifte te plaas, hoe om die woorde "Hello World" en 'n paar fyner punte op ontsnapping karakters soos aanhalings ("") te vertoon.

Hierdie week gaan ek insetparameters dek. Daar is ander gidse wat hierdie tipe ding leer, maar ek vind hulle spring in 'n paar redelik lae vlakke en gee dalk te veel inligting.

Wat is 'n parameter?

In die "Hello World" -skrip van die laaste handleiding was dit baie staties. Die skrif het glad nie veel gedoen nie.

Hoe kan ons die "Hello World" -skripsie verbeter?

Wat van 'n skrif wat die persoon wat dit bestuur, groet? In plaas daarvan om "Hello World" te sê, sal dit "Hello Gary", "Hello Tim" of "Hello Dolly" sê.

Sonder die vermoë om insetparameters te aanvaar, moet ons drie skrifte "hellogary.sh", "hellotim.sh" en "hellodolly.sh" skryf.

Deur ons script toe te laat om insetparameters te lees, kan ons een skrif gebruik om iemand te groet.

Om dit te doen, maak 'n terminaal venster (CTRL + ALT + T) oop en navigeer na jou skrifmap deur die volgende te tik: ( oor cd-opdrag )

CD scripts

Skep 'n nuwe script genaamd greetme.sh deur die volgende te tik: ( oor kontakopdrag)

raak greetme.sh

Open die skrip in u gunsteling-redakteur deur die volgende te tik: ( oor nano bevel )

nano greetme.sh

Tik die volgende teks in nano:

#! / bin / bash echo "hallo $ @"

Druk Ctrl en O om die lêer te stoor en dan CTRL en X om die lêer te sluit.

Om die skrip uit te voer, voer die volgende in die opdraglyn wat met u naam vervang.

sh greetme.sh

As ek die skrif met my naam laat loop, word die woorde "Hello Gary" vertoon.

Die eerste reël het die #! / Bin / bash-lyn wat gebruik word om die lêer as 'n bash script te identifiseer.

Die tweede reël gebruik die echo verklaring om die woord hallo te echo en dan is daar die vreemde $ @ notasie. ( oor echo bevel )

Die $ @ brei uit om elke parameter wat saam met die naam van die script ingevoer is, weer te gee. As jy dus "sh greetme.sh tim" getik het, sal die woorde "hallo tim" vertoon word. As jy "greetme.sh tim smith" getik het, sal die woorde "hallo tim smith" vertoon word.

Dit kan lekker wees vir die greetme.sh-skrip om net te sê hallo met net die eerste naam. Niemand sê "hallo gary newell" as hulle my ontmoet nie, kan hulle wel "hallo gary" sê.

Kom ons verander die skrif sodat dit net die eerste parameter gebruik. Open die greetme.sh script in nano deur die volgende te tik:

nano greetme.sh

Verander die skrif sodat dit soos volg lui:

#! / bin / bash echo "hallo $ 1"

Stoor die script deur Ctrl en O te druk en druk dan CTRL en X af.

Begin die skrip soos hieronder getoon (vervang my naam met joune):

sh greetme.sh gary newell

As jy die draaiboek loop, sal dit eenvoudig "hallo gary" (of hopelik "hallo" en wat jou naam is, sê.

Die 1 nadat die $ simbool basies aan die echo-opdrag sê, gebruik die eerste parameter. As jy die $ 1 vervang met 'n $ 2, dan sal dit "Hello Newell" (of wat ook al jou van is) vertoon.

Terloops, as jy die $ 2 met 'n $ 3 vervang het en die skrif met net 2 parameters gehardloop het, sou die uitset eenvoudig "Hello" wees.

Dit is moontlik om die aantal parameters wat eintlik ingevoer is, te vertoon en te hanteer. In latere tutoriale sal ek wys hoe om die parametertelling vir valideringsdoeleindes te gebruik.

Om die aantal parameters te vertoon, maak die greetme.sh script (nano greetme.sh) oop en verander die teks soos volg:

#! / bin / bash echo "jy het $ # name ingeskryf" echo "hallo $ @"

Druk Ctrl en O om die script en Ctrl en X te stoor om nano te verlaat.

Die $ # op die 2de reël toon die aantal parameters wat ingevoer is.

Tot dusver is dit alles roman, maar nie baie nuttig nie. Wie het 'n script nodig wat net "hallo" vertoon?

Die werklike gebruik vir echo-stellings is om werklike en betekenisvolle afvoer aan die gebruiker te gee. As jy kan voorstel dat jy iets ingewikkeld wil doen, wat 'n paar ernstige knyp- en lêer- / vouer manipulasie behels, kan dit nuttig wees om aan die gebruiker te wys wat gebeur elke stap van die pad.

Daarenteen maak insetparameters jou script interaktief. Sonder insetparameters sou jy dosyne skrifte benodig, almal wat baie soortgelyke dinge doen, maar met effens verskillende name.

Met al hierdie dinge in gedagte, is daar 'n paar ander nuttige insetparameters wat dit 'n goeie idee is om te weet en ek sal hulle almal in een kodebrosjure insluit.

Open jou groetme.sh script en wysig dit soos volg:

#! / bin / bash echo "Leêrnaam: $ 0" echo "Proses ID: $$" echo "---------------------------- --- "echo" jy het $ # name ingeskryf "echo" hallo $ @ "

Druk Ctrl en O om die lêer te stoor en CTRL en X om te sluit.

Nou Begin die skrif (vervang met jou naam).

sh greetme.sh

Hierdie keer vertoon die skrip die volgende:

Leêrnaam: greetme.sh Proses-ID: 18595 ------------------------------ jy het 2 name ingeskryf hello gary newell

Die $ 0 op die eerste reël van die script toon die naam van die script wat jy uitvoer. Let daarop dat dit dollar nul is en nie dollar nie.

Die $$ op die tweede reël vertoon die proses-ID van die script wat jy uitvoer. Hoekom is dit nuttig? As jy 'n draaiboek op die voorgrond uitvoer, kan jy dit kanselleer deur eenvoudig Ctrl en C te druk. As jy die skrip in die agtergrond gehardloop het en begin loop en dieselfde ding doen oor en oor of begin skade aan jou stelsel veroorsaak het, sal jy nodig hê om dit dood te maak.

Om 'n skrip wat op die agtergrond loop, te vermoor, benodig jy die proses-ID van die script. Sou dit nie goed wees as die script die proses-id gegee het as deel van sy uitvoer nie. ( oor ps en dood bevele )

Ten slotte voordat ek klaar was met hierdie onderwerp, wou ek bespreek waar die uitset gaan. Elke keer as die skrip tot dusver geloop het, is die uitset op die skerm vertoon.

Dit is redelik algemeen dat die scriptuitvoer geskryf word na 'n uitvoerlêer. Om dit te doen, voer jou skrif soos volg uit:

sh greetme.sh gary> greetme.log

Die> simbool in die bogenoemde opdrag gee die teks "hello gary" na 'n lêer genaamd greetme.log.

Elke keer as jy die skrip met die> simbool hardloop, word die inhoud van die uitvoerlêer oorskryf. As u die lêer wil byvoeg, vervang die> met >>.

opsomming

U behoort nou teks op die skerm te kan skryf en insetteparameters te aanvaar.