Skip to main content

Nybörjarhandbok till BASH-ingångsparametrar

Anonim

Välkommen till 2: a delen av nybörjarhandboken till BASH-serien, som är unik, eftersom den är den enda BASH-handledningen skriven av en nybörjare för nybörjare.

Läsarna av den här guiden kommer att bygga upp sin kunskap när jag bygger upp mina kunskaper och förhoppningsvis i slutet av det hela kommer vi att kunna skriva några ganska kloka skript.

Förra veckan omfattade jag att skapa ditt första skript som bara visade orden "Hello World". Det täcker ämnen som textredigerare, hur man öppnar ett terminalfönster, var man ska sätta in dina skript, hur man visar orden "Hello World" och några finare punkter på escape-tecken som citat ("").

Denna vecka kommer jag att täcka inmatningsparametrar. Det finns andra guider som lär ut denna typ av sak men jag tycker att de hoppar in i några ganska låga saker och kanske ger för mycket information.

Vad är en parameter?

I "Hello World" -skriptet från den sista handledningen var det allt väldigt statiskt. Skriptet gjorde inte riktigt mycket alls.

Hur kan vi förbättra på "Hello World" -skriptet?

Vad sägs om ett manus som hälsar personen som driver den? Istället för att säga "Hello World" kommer det att säga "Hello Gary", "Hello Tim" eller "Hello Dolly".

Utan förmågan att acceptera inmatningsparametrar skulle vi behöva skriva tre skript "hellogary.sh", "hellotim.sh" och "hellodolly.sh".

Genom att låta vårt skript läsa inmatningsparametrar kan vi använda ett skript för att hälsa på någon.

För att göra detta öppna ett terminalfönster (CTRL + ALT + T) och navigera till din skriptmapp genom att skriva följande: (om cd-kommandot)

cd skript

Skapa ett nytt skript som heter greetme.sh genom att skriva följande: (om kontaktkommandon)

touch greetme.sh

Öppna skriptet i din favoritredigerare genom att skriva följande: (om nano-kommandot)

nano greetme.sh

Ange följande text inom nano:

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

Tryck CTRL och O för att spara filen och sedan CTRL och X för att stänga filen.

För att köra skriptet, skriv följande i kommandoraden som ersätter med ditt namn.

sh greetme.sh

Om jag kör skriptet med mitt namn visas orden "Hello Gary".

Den första raden har linjen #! / Bin / bash som används för att identifiera filen som ett bash script.

Den andra raden använder ekotillståndet för att echo ordet hej och då finns det den märkliga $ @ notationen. (om ekkokommando)

$ @ Expanderar för att visa alla parametrar som skrivits in tillsammans med skriptnamnet. Så om du skrev "sh greetme.sh tim" skulle orden "hej tim" visas. Om du skrev "greetme.sh tim smith" skulle orden "hej tim smith" visas.

Det kan vara trevligt för greetme.sh-skriptet att bara säga hej med bara förnamnet. Ingen säger "hej gary newell" när de möter mig, de kanske säger "hej gary" men.

Låt oss ändra skriptet så att det bara använder den första parametern. Öppna greetme.sh-skriptet i nano genom att skriva följande:

nano greetme.sh

Byt skriptet så att det lyder som följer:

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

Spara skriptet genom att trycka på CTRL och O och avsluta sedan genom att trycka på CTRL och X.

Kör skriptet som visas nedan (ersätt mitt namn med din):

sh greetme.sh gary newell

När du kör skriptet kommer det helt enkelt att säga "hej gary" (eller förhoppningsvis "hej" och vad du än heter.

1 efter att $ symbolen i grunden säger till ekokommandot, använd den första parametern. Om du ersätter $ 1 med en $ 2 så skulle det visa "hej newell" (eller vad ditt efternamn är).

För övrigt om du ersätter $ 2 med en $ 3 och körde manuset med bara 2 parametrar så skulle resultatet bara vara "Hello".

Det är möjligt att visa och hantera antalet parametrar som faktiskt har skrivits in och i senare handledning kommer jag att visa hur man använder parametervärdet för valideringsändamål.

För att visa antalet parametrar som anges, öppna greetme.sh-skriptet (nano greetme.sh) och ändra texten enligt följande:

#! / bin / bash echo "du skrev in $ # namn" echo "hej $ @"

Tryck CTRL och O för att spara skriptet och CTRL och X för att avsluta nano.

$ # På den andra raden visar antalet parametrar som angivits.

Hittills har allt detta varit nytt men inte särskilt användbart. Vem behöver ett manus som bara visar "hej"?

Den verkliga användningen för eko-uttalanden är att tillhandahålla verbos och meningsfull utmatning till användaren. Om du kan föreställa dig att du vill göra något komplicerat, vilket innebär en viss seriös antal crunching och fil / mappmanipulation, skulle det vara användbart att visa användaren vad som händer varje steg på vägen.

Däremot gör inmatningsparametrar ditt script interaktivt. Utan ingångsparametrar skulle du behöva massor av skript alla gör mycket liknande saker men med lite annorlunda namn.

Med allt detta i åtanke finns det några andra användbara inmatningsparametrar som det är en bra idé att veta och jag kommer att inkludera dem alla i ett kodfragment.

Öppna ditt greetme.sh-skript och ändra det enligt följande:

#! / bin / bash echo "Filnamn: $ 0" echo "Process ID: $$" echo "---------------------------- --- "echo" du skrev in $ # namn "echo" hej $ @ "

Tryck CTRL och O för att spara filen och CTRL och X för att avsluta.

Nu Kör skriptet (ersätt med ditt namn).

sh greetme.sh

Den här gången visar skriptet följande:

Filnamn: greetme.sh Process ID: 18595 ------------------------------ du skrev in 2 namn hej gary newell

$ 0 på första raden i manuset visar namnet på det skript du kör.Observera att det är dollar noll och inte dollar o.

$$ på andra raden visar process-id för skriptet du kör. Varför är det här användbart? Om du kör ett skript i förgrunden kan du avbryta det genom att helt enkelt trycka på CTRL och C. Om du körde skriptet i bakgrunden och det började loopa och göra samma sak om och om igen eller började orsaka skador på ditt system skulle du behöva att döda det.

För att döda ett skript som körs i bakgrunden behöver du scriptets process ID. Skulle det inte vara bra om manuset gav processen id som en del av sin produktion. (om ps och döda kommandon)

Slutligen innan jag slutade med det här ämnet ville jag diskutera om var produktionen går. Varje gång manuset har kört så långt har utmatningen visats på skärmen.

Det är ganska vanligt att skriptutdata skrivs till en utdatafil. För att göra detta kör ditt skript enligt följande:

sh greetme.sh gary> greetme.log

Symbolen> i ovanstående kommando utmatar texten "hej gary" till en fil som heter greetme.log.

Varje gång du kör skriptet med> -symbolen skrivs det över innehållet i utdatafilen. Om du föredrar att lägga till filen ska du ersätta> med >>.

Sammanfattning

Du borde nu kunna skriva text till skärmen och acceptera ingångsparametrar.