Werken met variabelen op Linux

Veel belangrijke waarden zijn opgeslagen op Linux-systemen in wat we "variabelen" noemen, maar er zijn eigenlijk verschillende soorten variabelen en enkele interessante opdrachten die u kunnen helpen ermee te werken. In een eerdere post hebben we gekeken naar omgevingsvariabelen en waar ze zijn gedefinieerd. In dit bericht gaan we kijken naar variabelen die worden gebruikt op de opdrachtregel en binnen scripts.

Gebruikersvariabelen

Hoewel het vrij eenvoudig is om een ​​variabele op de opdrachtregel in te stellen, zijn er een paar interessante trucs. Om een ​​variabele in te stellen, hoeft u alleen maar zoiets te doen:

$ myvar = 11 $ myvar2 = "elf" 

Om de waarden weer te geven, doet u dit eenvoudig:

$ echo $ myvar 11 $ echo $ myvar2 elf 

Je kunt ook werken met je variabelen. Als u bijvoorbeeld een numerieke variabele wilt verhogen, kunt u een van deze opdrachten gebruiken:

$ 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 $ laat "myvar ++" $ echo $ myvar 18 

Bij sommige hiervan kun je meer dan 1 toevoegen aan de waarde van een variabele. Bijvoorbeeld:

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

Met al deze keuzes vindt u er waarschijnlijk een die gemakkelijk te onthouden en handig in gebruik is.

Je kan ook uitgeschakeld een variabele - in feite ongedefinieerd.

$ uitschakelen myvar $ echo $ myvar 

Een andere interessante optie is dat je een variabele kunt instellen en maken alleen lezen. Met andere woorden, eenmaal ingesteld op alleen-lezen, kan de waarde ervan niet worden gewijzigd (althans niet zonder een of andere lastige opdrachtregel-tovenarij). Dat betekent dat je het ook niet kunt uitschakelen.

$ readonly myvar3 = 1 $ echo $ myvar3 1 $ ((myvar3 ++)) -bash: myvar3: readonly variable $ unset myvar3 -bash: unset: myvar3: kan niet worden uitgeschakeld: readonly variabele 

U kunt elk van die instel- en ophoogopties gebruiken voor het toewijzen en manipuleren van variabelen binnen scripts, maar er zijn ook enkele zeer nuttige interne variabelen voor het werken binnen scripts. Merk op dat u hun waarden niet opnieuw kunt toewijzen of ze niet kunt verhogen.

Interne variabelen

Er zijn nogal wat variabelen die binnen scripts kunnen worden gebruikt om argumenten te evalueren en informatie over het script zelf weer te geven.

  • $ 1, $ 2, $ 3 etc. vertegenwoordigen de eerste, tweede, derde, etc. argumenten voor het script.
  • $ # vertegenwoordigt het aantal argumenten.
  • $ * vertegenwoordigt de reeks argumenten.
  • $ 0 vertegenwoordigt de naam van het script zelf.
  • $? vertegenwoordigt de retourcode van het eerder uitgevoerde commando (0 = succes).
  • $$ toont de proces-ID voor het script.
  • $ PPID toont de proces-ID voor uw shell (het bovenliggende proces voor het script).

Sommige van deze variabelen werken ook op de opdrachtregel, maar tonen gerelateerde informatie:

  • $ 0 toont de naam van de shell die je gebruikt (bijvoorbeeld -bash).
  • $$ toont de proces-ID voor uw shell.
  • $ PPID toont de proces-ID voor het bovenliggende proces van uw shell (voor mij is dit sshd).

Als we al deze variabelen in een script gooien om de resultaten te zien, kunnen we dit doen:

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

Wanneer we dit script aanroepen, zien we zoiets als dit:

$ tryme een twee drie / home / 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 

Als we de proces-ID van de shell controleren zodra het script is uitgevoerd, kunnen we zien dat het overeenkomt met de PPID die in het script wordt weergegeven:

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

Het is natuurlijk waarschijnlijker dat we deze variabelen op aanzienlijk nuttiger manieren gebruiken dan alleen hun waarden weer te geven. Laten we eens kijken hoe we dit kunnen doen.

Controleren of er argumenten zijn verstrekt:

als [$ # == 0]; echo dan "$ 0 bestandsnaam" exit 1 fi 

Controleren of een bepaald proces actief is:

ps -ef | grep apache2> / dev / null als [$? ! = 0]; dan draait echo Apache exit fi niet 

Controleer of een bestand bestaat voordat u het probeert te openen:

als [$ # -lt 2]; echo dan "Gebruik: $ 0 regels bestandsnaam" exit 1 fi als [! -f $ 2]; echo dan "Fout: Bestand $ 2 niet gevonden" exit 2 anders hoofd - $ 1 $ 2 fi 

En in dit kleine script controleren we of het juiste aantal argumenten is opgegeven, of het eerste argument numeriek is en of het tweede argument een bestaand bestand is.

#! / bin / bash als [$ # -lt 2]; echo dan "Gebruik: bestandsnaam $ 0 regels" exit 1 fi als [[$ 1! = [0-9] *]]; echo dan "Fout: $ 1 is niet numeriek" exit 2 fi als [! -f $ 2]; echo dan "Fout: Bestand $ 2 niet gevonden" exit 3 anders echo bovenaan bestandskop - $ 1 $ 2 fi 

Variabelen hernoemen

Bij het schrijven van een ingewikkeld script is het vaak handig om namen toe te wijzen aan de argumenten van het script in plaats van ernaar te blijven verwijzen als $ 1, $ 2, enzovoort. Bij de 35e regel is iemand die uw script leest misschien vergeten wat $ 2 vertegenwoordigt. Het zal voor die persoon een stuk eenvoudiger zijn als u de waarde van een belangrijke parameter toewijst aan $ filename of $ numlines.

#! / bin / bash als [$ # -lt 2]; echo dan "Gebruik: $ 0 regels bestandsnaam" exit 1 anders numlines = $ 1 bestandsnaam = $ 2 fi als [[$ numlines! = [0-9] *]]; echo dan "Fout: $ numlines is niet numeriek" exit 2 fi als [! -f $ bestandsnaam]; echo dan "Fout: Bestand $ bestandsnaam niet gevonden" exit 3 anders echo bovenaan bestandskop - $ numlines $ bestandsnaam fi 

Natuurlijk doet dit voorbeeldscript niets anders dan het uitvoeren van de hoofdopdracht om de bovenste X-regels in een bestand te tonen, maar het is bedoeld om te laten zien hoe interne parameters kunnen worden gebruikt in scripts om ervoor te zorgen dat het script goed werkt of mislukt met ten minste enige duidelijkheid.

[Bekijk Sandra Henry-Stocker's twee minuten durende Linux-tips om te leren hoe je een groot aantal Linux-commando's onder de knie krijgt] Word lid van de Network World-gemeenschappen op Facebook en LinkedIn om commentaar te geven op onderwerpen die voorop staan.