Arbejde med variabler på Linux

Der er mange vigtige værdier lagret på Linux-systemer i det, vi kalder "variabler", men der er faktisk flere typer af variabler og nogle interessante kommandoer, der kan hjælpe dig med at arbejde med dem. I et tidligere indlæg kiggede vi på miljøvariabler, og hvor de er defineret. I dette indlæg skal vi se på variabler, der bruges på kommandolinjen og inden for scripts.

Brugervariabler

Selvom det er ret let at opsætte en variabel på kommandolinjen, er der et par interessante tricks. For at opsætte en variabel er alt hvad du skal gøre noget lignende:

$ myvar = 11 $ myvar2 = "elleve" 

For at vise værdierne gør du blot dette:

$ ekko $ myvar 11 $ ekko $ myvar2 elleve 

Du kan også arbejde med dine variabler. For eksempel at øge en numerisk variabel kan du bruge en af ​​disse kommandoer:

$ myvar = $ ((myvar + 1)) $ echo $ myvar 12 $ ((myvar = myvar + 1)) $ echo $ myvar 13 $ ((myvar + = 1)) $ echo $ myvar 14 $ ((myvar ++)) $ echo $ myvar 15 $ let "myvar = myvar + 1" $ echo $ myvar 16 $ let "myvar + = 1" $ echo $ myvar 17 $ let "myvar ++" $ echo $ myvar 18 

Med nogle af disse kan du tilføje mere end 1 til en variables værdi. For eksempel:

$ myvar0 = 0 $ ((myvar0 ++)) $ echo $ myvar0 1 $ ((myvar0 + = 10)) $ echo $ myvar0 11 

Med alle disse valg finder du sandsynligvis mindst et, der er let at huske og praktisk at bruge.

Du kan også frakoblet en variabel - grundlæggende at definere den.

$ unset myvar $ echo $ myvar 

En anden interessant mulighed er, at du kan oprette en variabel og fremstille den Læs kun. Med andre ord, når den først er indstillet til skrivebeskyttet, kan dens værdi ikke ændres (i det mindste ikke uden nogle meget vanskelige kommandolinjegrupper). Det betyder, at du heller ikke kan deaktivere det.

$ readonly myvar3 = 1 $ echo $ myvar3 1 $ ((myvar3 ++)) -bash: myvar3: readonly variabel $ unset myvar3 -bash: unset: myvar3: kan ikke afbryde: readonly variabel 

Du kan bruge en hvilken som helst af disse indstillings- og forøgelsesindstillinger til at tildele og manipulere variabler inden for scripts, men der er også nogle meget nyttige interne variabler til at arbejde inden for scripts. Bemærk, at du ikke kan tildele deres værdier igen eller øge dem.

Interne variabler

Der er ganske mange variabler, der kan bruges i scripts til at evaluere argumenter og vise oplysninger om selve scriptet.

  • $ 1, $ 2, $ 3 osv. Repræsenterer de første, anden, tredje osv. Argumenter til scriptet.
  • $ # repræsenterer antallet af argumenter.
  • $ * repræsenterer strengen af ​​argumenter.
  • $ 0 repræsenterer navnet på selve scriptet.
  • $? repræsenterer returkoden for den tidligere kørte kommando (0 = succes).
  • $$ viser process-ID for scriptet.
  • $ PPID viser proces-id'et for dit shell (den overordnede proces til scriptet).

Nogle af disse variabler fungerer også på kommandolinjen, men viser relateret information:

  • $ 0 viser navnet på den skal, du bruger (f.eks. -Bash).
  • $$ viser proces-id'et for din skal.
  • $ PPID viser proces-id'et for din shell's overordnede proces (for mig er dette sshd).

Hvis vi kaster alle disse variabler i et script bare for at se resultaterne, kan vi muligvis gøre dette:

#! / bin / bash echo $ 0 echo $ 1 echo $ 2 echo $ # echo $ * echo $? ekko $$ ekko $ PPID 

Når vi kalder dette script, ser vi noget lignende:

$ tryme en to tre / hjem / shs / ​​bin / tryme <== script name one <== first argument two <== second argument 3 <== number of arguments one two three <== all arguments 0 <== return code from previous echo command 10410 <== script's process ID 10109 <== parent process's ID 

Hvis vi kontrollerer processens ID for shell, når scriptet er kørt, kan vi se, at det matcher PPID, der vises i scriptet:

$ ekko $$ 10109 <== shell's process ID 

Selvfølgelig er det mere sandsynligt, at vi bruger disse variabler på betydeligt mere nyttige måder end blot at vise deres værdier. Lad os tjekke nogle måder, vi kan gøre dette på.

Kontroller for at se, om der er fremført argumenter:

hvis [$ # == 0]; derefter ekko "$ 0 filnavn" exit 1 fi 

Kontroller for at se, om en bestemt proces kører:

ps -ef | grep apache2> / dev / null hvis [$? ! = 0]; derefter ekko Apache kører ikke exit fi 

Bekræftelse af, at der findes en fil, før du prøver at få adgang til den:

hvis [$ # -lt 2]; gentager derefter "Brug: $ 0 linjer filnavn" afslutte 1 fi hvis [! -f $ 2]; derefter gentager "Fejl: Fil $ 2 ikke fundet" Afslut 2 andet hoved - $ 1 $ 2 fi 

Og i dette lille script kontrollerer vi, om det rigtige antal argumenter er leveret, hvis det første argument er numerisk, og om det andet argument er en eksisterende fil.

#! / bin / bash if [$ # -lt 2]; derefter ekko "Brug: $ 0 linjer filnavn" exit 1 fi hvis [[$ 1! = [0-9] *]]; derefter ekko "Fejl: $ 1 er ikke numerisk" exit 2 fi hvis [! -f $ 2]; derefter ekko "Fejl: Fil $ 2 ikke fundet" afslutte 3 ellers ekko toppen af ​​filhovedet - $ 1 $ 2 fi 

Omdøb variabler

Når du skriver et kompliceret script, er det ofte nyttigt at tildele navne til scriptets argumenter snarere end at fortsætte med at referere til dem som $ 1, $ 2 osv. Ved den 35. linje kan en person, der læser dit script muligvis glemme, hvad $ 2 repræsenterer. Det vil være meget lettere for denne person, hvis du tildeler en vigtig parameters værdi til $ filnavn eller $ numlines.

#! / bin / bash if [$ # -lt 2]; gentager derefter "Brug: $ 0 linjer filnavn" exit 1 ellers numlines = $ 1 filnavn = $ 2 fi hvis [[$ numlines! = [0-9] *]]; derefter ekko "Fejl: $ numlines er ikke numerisk" exit 2 fi hvis [! -f $ filnavn]; derefter ekko "Fejl: Fil $ filnavn ikke fundet" afslutte 3 ellers ekko toppen af ​​filhovedet - $ numlines $ filnavn fi 

Naturligvis gør dette eksempel script intet andet end at køre hovedkommandoen for at vise de øverste X-linjer i en fil, men det er beregnet til at vise, hvordan interne parametre kan bruges i scripts for at hjælpe med at sikre, at scriptet kører godt eller mislykkes med mindst noget klarhed.

[Se Sandra Henry-Stockers to-minutters Linux-tip for at lære at mestre en række Linux-kommandoer] Deltag i Network World-samfundene på Facebook og LinkedIn for at kommentere emner, der er øverste af sindet.