Hur att Arbeta med Variabler i Bash

0
396
Fatmawati Achmad Zaenuri/Shutterstock

Variabler som är avgörande om du vill skriva manus och förstå vad som koden du om att klippa och klistra från internet kommer att göra att din Linux-dator. Vi kommer att få dig igång!

Variabler 101

Variabler som heter symboler som representerar antingen en sträng eller numeriskt värde. När du använder dem i kommandon och uttryck, de behandlas som om du hade skrivit det värde de har i stället för namnet på variabeln.

För att skapa en variabel, du bara ange ett namn och värde för det. Din variabel namn bör vara beskrivande och påminna er om värdet av det som de håller. En variabel namnet får inte börja med ett nummer, och kan inte heller innehålla blanksteg. Det kan dock börja med ett understreck. Bortsett från detta, kan du använda någon blandning av versaler och gemener alfanumeriska tecken.

Exempel

Här ska vi skapa fem variabler. Formatet är att skriva namn, lika med-tecknet = och värdet. Observera att det inte är ett mellanslag före eller efter lika med-tecknet. Ge en variabel ett värde kallas ofta för tilldelning av ett värde till en variabel.

Vi kommer att skapa fyra string-variabler och en numerisk variabel this_year:

mig=Dave
my_boost=Linux
honom=Popeye
his_boost=Spenat
this_year=2019

För att se värdet hölls i en variabel, använd echo-kommandot. Du måste föregå variabelnamn med ett dollartecken $ när du refererar till det värde som den innehåller, så som visas nedan:

echo $my_name
echo $my_boost
echo $this_year

Låt oss använda alla våra variabler på en gång:

echo “$my_boost är till $mig som $his_boost är till $honom (c) $this_year”

Värdena för de variabler ersätta deras namn. Du kan också ändra värden på variabler. För att tilldela ett nytt värde till en variabel, my_boost, du bara upprepa vad du gjorde när man får sitt första värde, så här:

my_boost=Tequila

Om du kör föregående kommando, får du nu ett annat resultat:

echo “$my_boost är till $mig som $his_boost är till $honom (c) $this_year”

Så kan du använda samma kommando som refererar till samma variabler och få olika resultat om du ändrar värdena hålls i variabler.

Vi kommer att prata om citera variabler senare. För nu, här är några saker att komma ihåg:

  • En variabel i enkla citattecken behandlas som en bokstavlig sträng, och inte som en variabel.
  • Variabler i citattecken ” behandlas som variabler.
  • För att få det värde som innehas i en variabel, du måste ange dollartecken $.
  • En variabel utan dollartecken $ endast innehåller namnet på en variabel.

Du kan också skapa en variabel som tar sitt värde från en befintlig variabel eller antal variabler. Följande kommando definierar en ny variabel som heter drink_of_the_Year, och tilldelar den kombinerade värden för my_boost och this_year variabler:

drink_of-the_Year=”$my_boost $this_year”
echo drink_of_the-År

Hur man Använder Variabler i-Skript

Skript skulle vara helt lamslagna utan variabler. Variabler ger den flexibilitet som gör ett manus till en allmänhet, snarare än en specifik lösning. För att illustrera skillnaden, här är ett skript som räknas filer i katalogen /dev.

Skriv in detta i en textfil och spara den som fcnt.sh (för “file räkna”):

#!/bin/bash

folder_to_count=/dev

file_count=$(ls $folder_to_count | wc -l)

echo $file_count filer i $folder_to_count

Innan du kan köra skript, måste du göra den körbar, som visas nedan:

chmod +x fcnt.sh

Skriv följande för att köra skriptet:

./fcnt.sh

Detta skriver ut antalet filer i katalogen /dev. Här är hur det fungerar:

  • En variabel som heter folder_to_count definieras, och det är som att hålla strängen “/dev.”
  • En annan variabel, som kallas file_count, definieras. Denna variabel tar sitt värde från ett kommando substitution. Detta är kommandot för frasen mellan parenteserna $( ). Observera att det är ett dollartecken $ innan den första parentesen. Denna konstruktion $( ) utvärderar kommandon inom parentes, och returnerar sedan sin slutliga värde. I detta exempel, som värde är tilldelat till file_count variabel. Så långt som file_count variabel är berörda, det har gått ett värde att hålla, det är inte berörda av hur värdet har beräknats.
  • Kommandot utvärderas i kommandot substitution utför en ls fil notering på den katalog i folder_to_count variabel, som har ställts in till “/dev.” Så, skriptet utför kommandot “ls /dev.”
  • Utdata från kommandot leds in i wc-kommandot. -L (linje count) alternativ medför wc för att räkna antalet rader i utskriften från ls-kommandot. Som varje fil är noterade på en separat rad, detta är antalet filer och underkataloger i den “/dev” katalogen. Detta värde är tilldelat till file_count variabel.
  • Den sista raden använder echo för att visa resultatet.

Men detta fungerar bara på “/dev” katalogen. Hur kan vi göra skriptet fungerar med någon katalog? Allt som krävs är en liten förändring.

Hur du Använder Parametrar på kommandoraden i-Skript

Många kommandon som ls och wc, ta kommando rad parametrar. Dessa ger information till kommandoraden, så att den vet vad du vill göra. Om du vill ls för att arbeta på din hemkatalog och också för att visa dolda filer, kan du använda följande kommando, där tilde ~ och -a (all) alternativet är parametrar på kommandoraden:

ls ~ -en

Våra skript kan acceptera parametrar på kommandoraden. De refereras till som $1 för den första parametern $2 som det andra, och så vidare, upp till $9 för nionde parameter. (Det finns faktiskt en $0, liksom, men det är reserverade för att alltid hålla skriptet.)

Du kan referera till parametrar på kommandoraden i ett manus precis som vanliga variabler. Låt oss ändra vårt manus, som visas nedan, och spara den med det nya namnet fcnt2.sh:

#!/bin/bash

folder_to_count=$1

file_count=$(ls $folder_to_count | wc -l)

echo $file_count filer i $folder_to_count

Den här gången, folder_to_count variabeln tilldelas värdet av den första kommandoraden som en parameter, $1.

Resten av skriptet fungerar exakt som det gjorde innan. Snarare än en specifik lösning, ditt manus är nu allmän. Du kan använda det på valfri katalog eftersom det inte är hårdkodade att endast arbeta med/dev.”

Här är hur du gör skriptet körbart:

chmod +x fcnt2.sh

Nu, prova det med några kataloger. Du kan göra “/dev” först för att se till att du får samma resultat som innan. Skriv följande:

./fnct2.sh /dev
./fnct2.sh /etc
./fnct2.sh /bin

Du får samma resultat (207 filer) som innan till “/dev” katalogen. Detta är uppmuntrande, och du får directory-specifika resultat för var och en av övriga parametrar på kommandoraden.

För att förkorta skript, kan du göra oss av med de rörliga, folder_to_count, helt och hållet, och bara hänvisning $1 i hela enligt följande:

#!/bin/bash

file_count=$(ls $1 wc -l)

echo $file_count filer i $1

Att arbeta med Särskilda Variabler

Vi nämnde $0, vilket alltid är inställd på filnamnet av skriptet. Detta gör att du kan använda skript för att göra saker som att skriva ut sitt namn rätt, även om det är ett nytt namn. Detta är användbart för att logga situationer, i vilka du vill veta namnet på den process som lagt till en post.

Följande är de andra särskilda inställningar för variabler:

  • $#: Hur många parametrar på kommandoraden vidare till skriptet.
  • $@: Alla kommandoradsväljare som skickas till skriptet.
  • $?: Utgången status i den föregående processen för att köra.
  • $$: Process-ID (PID) för den aktuella skriften.
  • $USER: användarnamnet för Den användare som kör skriptet.
  • $HOSTNAME: värdnamnet på den dator som kör skriptet.
  • $SEKUNDER: Det antal sekunder som skriptet har körts.
  • $RANDOM: Returnerar ett slumptal.
  • $LINENO: Returnerar den aktuella raden nummer av skriften.

Du vill se dem alla i ett manus, inte du? Kan du! Spara följande i en text-fil som heter, special.sh:

#!/bin/bash

echo “Det var $# parametrar på kommandoraden”
echo “är De: $@”
echo “Parameter 1 är: $1”
echo “- skript anropas: 0 kr”
# alla gamla processen så att vi kan rapportera om exit-status
pwd
echo “pwd tillbaka $?”
echo “Detta skript har Process-ID $$”
echo “manuset var igång med $USER”
echo “Det är som körs på $HOSTNAME”
sova 3
echo “Det har varit igång $SEKUNDER sekunder”
echo “slumptal: $RANDOM”
echo “Detta är linje nummer $LINENO skript”

Skriv följande för att göra den körbar:

chmod +x special.sh

Nu kan du köra det med en massa olika parametrar på kommandoraden, så som visas nedan.

Miljövariabler

Bash använder miljövariabler för att definiera och registrera egenskaperna hos den miljö det skapar när den startar. Dessa innehåller information Bash kan lätt komma åt, till exempel användarnamn, språk, antal kommandon din historia filen kan innehålla, din standardredigerare, och mycket mer.

För att se det aktiva miljövariabler i din Bash session, använd detta kommando:

env | mindre

Om du bläddrar genom listan, kan du hitta några som skulle vara användbart som referens i dina skript.

Exportera Variabler

När skriptet körs, det är i sin egen process, och de variabler som man använder kan inte ses utanför den processen. Om du vill dela en variabel med ett annat manus som ditt manus lanserar, du har för att exportera en variabel. Vi kommer att visa dig hur man detta med två manus.

Först rädda följande filnamn script_one.sh:

#!/bin/bash

first_var=alpha
second_var=bravo

# kontrollera sina värden
echo “$0: first_var=$first_var, second_var=$second_var”

export first_var
export second_var

./script_two.sh

# kontrollera sina värden igen
echo “$0: first_var=$first_var, second_var=$second_var”

Detta skapar två variabler, first_var och second_var, och det anger vissa värden. Den skriver ut dessa till det terminal-fönster, export variabler, och samtal script_two.sh. När script_two.sh avslutas, och processen flödet återgår till det här manuset, det återigen skriver ut de variabler som till terminalfönstret. Du kan sedan se om de förändrats.

Det andra manuset som vi kommer att använda är script_two.sh. Detta är skriptet som script_one.shcalls. Skriv följande:

#!/bin/bash

# kontrollera sina värden
echo “$0: first_var=$first_var, second_var=$second_var”

# ange nya värden
first_var=charlie
second_var=delta

# kontrollera sina värden igen
echo “$0: first_var=$first_var, second_var=$second_var”

Denna andra skript som skriver ut värdena för de två variabler, tilldelas nya värden till dem, och sedan skriver ut dem igen.

För att köra dessa skript, måste du skriva följande för att göra dem körbara:

chmod +x script_one.sh
chmod +x script_two.sh

Och nu, skriv följande för att starta script_one.sh:

./script_one.sh

Detta är vad produktionen berättar:

  • script_one.sh skriver ut värdena för de variabler som är alpha och bravo.
  • script_two.sh skriver ut värdena för de variabler (alpha och bravo) som det har fått dem.
  • script_two.sh ändringar dem till charlie och delta.
  • script_one.sh skriver ut värdena för de variabler som är fortfarande i alpha och bravo.

Vad som händer i andra skript, vistelser i andra manus. Det är som kopior av de variabler som skickas till andra manus, men de är bort när skriptet avslutas. De ursprungliga variablerna i den första skriften inte ändras av något som händer till kopior av dem i den andra.

Hur man Citerar Variabler

Du kanske har märkt att när skript referera till variabler, de är i citattecken “. Detta gör att variabler att referera på rätt sätt, så att deras värden används när linjen är utförda i skriptet.

Om det värde som du tilldela en variabel som innehåller mellanslag, måste de anges inom citattecken när du tilldela dem till variabeln. Detta beror på, som standard, Bash använder ett mellanslag som avgränsare.

Här är ett exempel:

site_name=How-To Geek

Bash ser det utrymme innan “Nörd” som en indikation på att ett nytt kommando börjar. Det rapporterar att det inte finns något sådant kommando, och överger linje. echo visar oss att site_name variabel har ingenting—inte ens “How-To” – text.

Försök igen med citattecken kring värdet, som visas nedan:

site_name=”How-To Geek”

Den här gången, det är erkänt som ett enda värde och tilldelas rätt till site_name variabel.

echo Är Din Vän

Det kan ta lite tid att vänja sig vid kommandot substitution, och citerar variabler, och för att komma ihåg när du ska inkludera dollar tecken.

Innan du trycker på Enter och utföra en rad av Bash-kommandon, prova det med echo framför den. På detta sätt kan du se vad som kommer att hända är vad du vill. Du kan även fånga de eventuella misstag som du gjort i syntaxen.

LÄS NÄSTA

  • “Har Din Dator Har ett Virus? Så här Kontrollerar du
  • “Wi-Fi vs ZigBee, Z-Wave: Vilket Är bäst?
  • “Vad Gör “FWIW” Betyder, och Hur Använder Man Det?
  • “Hur Automatiskt att ta Bort Din YouTube-Historia
  • “Vad Är “Blandat Innehåll” och Varför Är Chrome Blockerar Det?