Skip to main content

Wat is een Linux-shell en wat zijn Shell-niveaus?

Sirenetest: hoe en waarom? - 0297.nl (April 2025)

Sirenetest: hoe en waarom? - 0297.nl (April 2025)
Anonim

De variabele $ SHLVL wordt gebruikt om u te vertellen hoeveel shells diep u bent. Als je hiermee in de war bent, is het de moeite waard om aan het begin te beginnen.

Wat is een schaal?

Een shell neemt opdrachten en geeft deze aan het onderliggende besturingssysteem om uit te voeren. Op de meeste Linux-systemen wordt het shell-programma BASH (The Bourne Again Shell) genoemd, maar er zijn andere beschikbaar, waaronder de C Shell (tcsh) en de KORN-shell (ksh).

Hoe toegang te krijgen tot de Linux Shell

Over het algemeen, als gebruiker, communiceer je met het shell-programma door het gebruik van een terminal-emulatieprogramma zoals XTerm, konsole of gnome-terminal.

Als u een Windows Manager zoals Openbox of een desktopomgeving zoals GNOME of KDE gebruikt, zult u een terminalemulator uit een menu of een streepje vinden. Op veel systemen opent de sneltoets CTRL ALT en T ook een terminalvenster.

Als alternatief kunt u overschakelen naar een andere TTY (teletypewriter) die directe toegang tot een opdrachtregelshell biedt. U kunt dit doen door op CTRL ALT en F1 of CTRL ALT en F2 enz. Te drukken.

Wat is een Shell-niveau

Wanneer u een opdracht uitvoert in een shell, wordt deze uitgevoerd op het shell-niveau. Binnen een shell kun je een andere shell openen, waardoor het een subshell wordt of de shell die het heeft geopend.

Daarom zou de bovenliggende schaal worden beschouwd als de shell van niveau 1 en de child shell zou een shell van niveau 2 zijn.

Hoe het Shell-niveau weer te geven

Het zou geen verrassing moeten zijn op basis van de titel van het artikel dat de manier waarop u kunt zien welk shell-niveau u gebruikt, is door de $ SHLVL-variabele te gebruiken.

Typ het volgende om het shell-niveau te zien dat u momenteel gebruikt:

echo $ SHLVL

Het is nogal interessant als je het bovenstaande commando binnen een terminalvenster uitvoert, je zou verbaasd zijn om te zien dat het geretourneerde resultaat 2 is.

Als u echter dezelfde opdracht uitvoert met de tty, is het resultaat 1.

Waarom zou je dit kunnen vragen? Welnu, de bureaubladomgeving die u draait, wordt bovenop een shell uitgevoerd. Die shell zou niveau 1 zijn. Elk terminalvenster dat u vanuit die bureaubladomgeving opent, moet een kind zijn van de shell die de bureaubladomgeving heeft geopend en daarom kan het shell-niveau niet starten op een ander nummer dan 2.

Het tty draait geen desktopomgeving en is daarom eenvoudig een shell van niveau 1.

Hoe maak ik Subschalen aan

De eenvoudigste manier om het concept van shells en subshells te testen is als volgt. Open een terminalvenster en typ het volgende:

echo $ SHLVL

Zoals we weten vanuit een terminalvenster is het minimale schaalniveau 2.

Plaats nu het volgende in het terminalvenster:

sh

Het commando sh voert een interactieve shell uit, wat betekent dat je een shell in een shell of een subshell gebruikt.

Als u dit nu opnieuw typt:

echo $ SHLVL

Je zult zien dat het shell level is ingesteld op 3. Het uitvoeren van de sh opdracht vanuit de subshell zal een subshell van de subshell openen en dus zal het shell level op level 4 zijn.

Waarom is het Shell-niveau belangrijk?

Het shell-niveau is belangrijk bij het nadenken over de reikwijdte van variabelen in uw scripts.

Laten we beginnen met iets eenvoudigs:

hond = maisieecho $ dog

Als u de opdracht hierboven in een shell uitvoert, wordt het woord maisie weergegeven in het terminalvenster.

Open een nieuwe shell door het volgende te typen:

sh

Als u deze opdracht uitvoert, ziet u dat er niets daadwerkelijk wordt geretourneerd:

echo $ dog

Dat komt omdat de $ dog-variabele alleen beschikbaar is op shell-niveau 2. Als u exit typt om de subshell af te sluiten en echo $ dog opnieuw uitvoert, wordt het woord maisie opnieuw weergegeven.

Het is ook de moeite waard om na te denken over het gedrag van globale variabelen binnen een shell.

Begin in een nieuw terminalvenster en typ het volgende:

export hond = maisieecho $ dog

Zoals je mag verwachten, wordt het woord maisie weergegeven. Open nu een subshell en typ nogmaals echo $ dog. Deze keer ziet u dat het woord maisie wordt weergegeven, ook al bevindt u zich in een deelvenster.

De reden hiervoor is dat het exportcommando de $ dog-variabele globaal maakte. Het veranderen van de $ dog variabele in de subshell, zelfs als je de exportopdracht gebruikt, heeft geen effect op zijn parent shells.

Hopelijk kun je hieruit zien dat het kennen van het shell-niveau waarin je werkt, van enig belang is bij het schrijven van scripts.

De voorbeelden die ik heb gegeven zijn erg simplistisch, maar het is vrij gebruikelijk dat een shell-script een ander shellscript roept dat op zijn beurt een ander shell-script aanroept dat nu allemaal op verschillende niveaus draait. Het kennen van het shell-niveau kan erg belangrijk zijn.