AllInfo

Hoe te Werken met Variabelen in Bash

Fatmawati Achmad Zaenuri/Shutterstock

Variabelen zijn van vitaal belang als u wilt om scripts te schrijven en te begrijpen wat de code die je knippen en plakken van het web zal doen om uw Linux-computer. We zullen u aan de slag!

Variabelen 101

Variabelen zijn genoemd symbolen die staan voor een tekenreeks of numerieke waarde. Wanneer u ze gebruikt in opdrachten en uitdrukkingen, ze worden behandeld als je had getypt de waarde die zij houden in plaats van de naam van de variabele.

Om een variabele te maken, u geeft alleen een naam en een waarde voor hem. De variabele namen moet beschrijvend en u herinneren aan de waarde die zij bezitten. De naam van een variabele mag niet beginnen met een nummer, noch kan het geen spaties bevatten. Het kan, echter, te beginnen met een underscore. Afgezien van dat, kunt u gebruik maken van een mix van hoofdletters en kleine alfanumerieke tekens.

Voorbeelden

Hier maken we vijf variabelen. Het formaat is de naam te typen, het is-gelijk teken =, en de waarde. Opmerking er is geen ruimte voor of na het = – teken. Het geven van een variabele een waarde wordt vaak aangeduid als het toekennen van een waarde aan de variabele.

We maken vier string variabelen en een numerieke variabele, this_year:

me=Dave
my_boost=Linux
hem=Popeye
his_boost=Spinazie
this_year=2019

Om te zien de waarde in een variabele, het gebruik van het echo commando. U moet voorafgaan aan de naam van de variabele met een dollarteken $ wanneer u verwijst naar de waarde die het bevat, zoals hieronder weergegeven:

echo $my_name
echo $my_boost
echo $this_year

Laten we gebruik maken van al onze variabelen in een keer:

echo “$my_boost is $me als $his_boost is $hem (c) $this_year”

De waarden van de variabelen vervangen van hun namen. U kunt ook de waarden van de variabelen. Voor het toewijzen van een nieuwe waarde naar de variabele, my_boost, u alleen herhalen wat u deed toen u het toegewezen zijn eerste waarde, zoals:

my_boost=Tequila

Als u opnieuw de vorige opdracht uitvoeren, krijg je nu een ander resultaat:

echo “$my_boost is $me als $his_boost is $hem (c) $this_year”

U kunt dus gebruik maken van dezelfde opdracht die verwijst naar dezelfde variabelen en andere resultaten te krijgen als u de waarden in de variabelen.

We praten over citeren variabelen hoger. Voor nu, hier zijn een paar dingen om te onthouden:

U kunt ook een variabele die de waarde van een bestaande variabele of van een aantal variabelen. De volgende opdracht definieert een nieuwe variabele genaamd drink_of_the_Year, en wijst deze de gecombineerde waarden van de my_boost en this_year variabelen:

drink_of-the_Year=”$my_boost $this_year”
echo drink_of_the Jaar

Het Gebruik van Variabelen in Scripts

Scripts zouden worden volledig verlamd zonder variabelen. Variabelen bieden de flexibiliteit waarmee een script van een algemeen, in plaats van een specifieke oplossing. Ter illustratie van het verschil, hier is een script dat telt de bestanden in de /dev directory.

Type dit in een tekst bestand, en vervolgens opslaan als fcnt.sh (voor “bestand ” count”):

#!/bin/bash

folder_to_count=/dev

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

echo $file_count bestanden in $folder_to_count

Voordat u het script uitvoert, moet u het uitvoerbare code, zoals hieronder getoond:

chmod +x fcnt.sh

Typ het volgende om het uitvoeren van het script:

./fcnt.sh

Hiermee kunt u het aantal bestanden in de /dev directory. Hier is hoe het werkt:

Maar dit werkt alleen voor de “/dev” directory. Hoe kunnen we het script werkt met elke willekeurige directory? Al duurt het is een kleine verandering.

Het Gebruik van Opdracht Regel Parameters in Scripts

Veel commando ‘ s, zoals ls en wc voor gezamenlijk gebruik, neem het commando lijn parameters. Deze informatie bieden aan de opdracht, zodat het weet wat u ermee wilt doen. Als u wilt ls om te werken op uw home directory en ook om verborgen bestanden te tonen, kunt u gebruik maken van de volgende opdracht, waarbij de tilde ~ en -een (hele) de optie parameters voor de opdrachtregel:

ls ~ -a

Onze scripts kunnen accepteren command line parameters. Ze verwezen als $1, – voor de eerste parameter, $2 het tweede, en zo verder, tot $9 voor de negende parameter. (Eigenlijk, is er een $0, – en, maar dat is voorbehouden aan houd altijd het script.)

U kunt verwijzen naar parameters voor de opdrachtregel in een script, net zoals u de gewone variabelen. Laten we wijzigen ons script, zoals hieronder weergegeven, en opslaan met de nieuwe naam fcnt2.sh:

#!/bin/bash

folder_to_count=$1

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

echo $file_count bestanden in $folder_to_count

Deze keer, de folder_to_count variabele krijgt de waarde van de eerste command line parameter $1.

De rest van het script werkt precies hetzelfde als voorheen. In plaats van een specifieke oplossing, je script is nu een algemene één. U kunt het gebruiken op elke willekeurige map, want het is niet hardcoded werken alleen met “/dev.”

Hier is hoe je het script uitvoerbaar:

chmod +x fcnt2.sh

Nu, probeer het met een paar mappen. Je kunt het doen “/dev” het eerste dat u te maken krijgt hetzelfde resultaat als voorheen. Typ het volgende:

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

Je krijgt hetzelfde resultaat (207 bestanden) als voor de “/dev” directory. Dit is bemoedigend, en je krijgt directory-specifieke resultaten voor elk van de andere command line parameters.

Met het verkorten van de script, je zou kunnen afzien van de variabele, folder_to_count, geheel, en slechts referentie $1 rookvrij, als volgt:

#!/bin/bash

file_count=$(ls $1 wc-l)

echo $file_count bestanden in $1

Werken met Speciale Variabelen

Wij vermeld $0, dat is altijd ingesteld op de bestandsnaam van het script. Dit kunt u gebruik maken van het script dingen doen zoals het afdrukken van de naam correct uit, zelfs als het is gewijzigd. Dit is handig in te loggen situaties, waarin u wilt weten wat de naam van het proces dat een vermelding.

De volgende zijn de andere speciale variabelen:

U wilt zien van alle van hen in een script, denk je niet? Je kunt! Sla de volgende tekst als een bestand met de naam, special.sh:

#!/bin/bash

echo “Er waren $# parameters voor de opdrachtregel”
echo “Ze zijn: $@”
echo “Parameter 1 is: $1”
echo “Het script is aangeroepen: $0”
# een oud proces, zodat wij u kunnen melden op de exit status
pwd
echo “pwd geretourneerd $?”
echo “Dit script heeft Proces-ID $$”
echo “Het script werd gestart door $USER”
echo “Het wordt uitgevoerd op $HOSTNAME”
slaap 3
echo “Deze is uitgevoerd voor $SECONDEN seconden”
echo “Random number: $RANDOM”
echo “Dit is regel nummer $LINENO van het script”

Typ het volgende om het uitvoerbare bestand:

chmod +x special.sh

Nu, u kunt uitvoeren met een bos van verschillende parameters voor de opdrachtregel, zoals hieronder weergegeven.

Omgevingsvariabelen

Bash maakt gebruik van omgevingsvariabelen voor het definiëren en vastleggen van de eigenschappen van de omgeving die zij maakt bij het van start. Deze informatie Bash kan gemakkelijk toegang hebben, zoals uw gebruikersnaam, land, het aantal commando ‘ s uw geschiedenis bestand kan houden, is de standaard editor, en nog veel meer.

De actieve omgevingsvariabelen in uw Bash-sessie, gebruik je dit commando:

env | minder

Als u door de lijst bladert, je zou kunnen vinden dat nuttig zou zijn om de verwijzing in uw scripts.

Het Exporteren van Variabelen

Wanneer een script wordt uitgevoerd, het is in haar eigen proces heeft, en de variabelen die gebruikt kan worden gezien buiten dat proces. Als u wilt delen, een variabele met een ander script dat uw script wordt gestart, moet u het exporteren van die variabele. We zullen laten zien hoe je dit met twee scripts.

Sla eerst het volgende met de bestandsnaam script_one.sh:

#!/bin/bash

first_var=alpha
second_var=bravo

# check hun waarden
echo “$0: first_var=$first_var, second_var=$second_var”

export first_var
export second_var

./script_two.sh

# check hun waarden opnieuw
echo “$0: first_var=$first_var, second_var=$second_var”

Dit maakt de twee variabelen, first_var en second_var, en het kent een aantal waarden. Het drukt deze naar het terminal venster uitvoer van de variabelen, en oproepen script_two.sh. Wanneer script_two.sh beëindigt, en de proces flow geeft aan dit script, het opnieuw afdrukken van de variabelen naar het terminal venster. U kunt dan zien of ze veranderd.

Het tweede script dat we gebruiken is script_two.sh. Dit is het script dat script_one.shcalls. Typ het volgende:

#!/bin/bash

# check hun waarden
echo “$0: first_var=$first_var, second_var=$second_var”

# geef de nieuwe waarden
first_var=charlie
second_var=delta

# check hun waarden opnieuw
echo “$0: first_var=$first_var, second_var=$second_var”

Deze tweede script de waarden van de twee variabelen, wijst nieuwe waarden voor hen, en dan drukt ze weer.

Voor het uitvoeren van deze scripts, moet u het type van de volgende handelingen uit om ze uitvoerbaar:

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

En nu, typ het volgende om te starten script_one.sh:

./script_one.sh

Dit is wat de output vertelt ons:

Wat gebeurt er in het tweede script, blijft in de tweede script. Het is net als kopieën van de variabelen worden verzonden naar de tweede script, maar ze zijn weggegooid als dat script wordt afgesloten. De oorspronkelijke variabelen in het eerste script niet veranderd door iets wat er gebeurt met de kopieën van hen in de tweede.

Hoe om te Citeren Variabelen

U heeft misschien gemerkt dat wanneer scripts referentie variabelen, die ze tussen aanhalingstekens “. Dit maakt variabelen worden verwezen correct, zodat hun waarden worden gebruikt wanneer de regel wordt uitgevoerd in het script.

Als de waarde die u toekent aan een variabele spaties bevat, moet u ze moet tussen aanhalingstekens wanneer u deze toewijzen aan de variabele. Dit is omdat de standaard Bash maakt gebruik van een spatie als scheidingsteken.

Hier is een voorbeeld:

desitenaam=How-To Geek

Bash ziet de ruimte voor “Geek” als een indicatie dat een nieuwe opdracht begint. Het geeft aan dat er geen dergelijke opdracht, en verlaat de lijn. echo laat ons zien dat de desitenaam variabele houdt niets—zelfs niet de “How-To” – tekst.

Probeer dat weer met aanhalingstekens rond de waarde, zoals hieronder weergegeven:

desitenaam=”How-To Geek”

Deze tijd, het is erkend als een enkele waarde en toegewezen correct te desitenaam variabele.

echo Is Uw Vriend

Het kan enige tijd duren om te wennen aan de opdracht substitutie, onder vermelding van variabelen, en herinneren wanneer het dollar-teken.

Voordat je op Enter drukt en het uitvoeren van een lijn van Bash commando ‘ s, probeer eens met een echo in de voorkant van het. Op deze manier kunt u er zeker van wat er gaat gebeuren is wat je wilt. U kunt ook de vangst van iedere fout die je hebt gemaakt in de syntaxis.

LEES VERDER

Exit mobile version