Skip to main content

Hvad er et Linux Shell og hvad er Shell niveauer?

Kan grundloven bruges som våben? (April 2025)

Kan grundloven bruges som våben? (April 2025)
Anonim

$ SHLVL-variablen bruges til at fortælle, hvor mange skaller du er dybt. Hvis du er forvirret af dette, er det værd at starte i begyndelsen.

Hvad er en Shell?

En shell tager kommandoer og giver dem til det underliggende operativsystem til at udføre. På de fleste Linux-systemer hedder shell-programmet BASH (The Bourne Again Shell), men der er andre tilgængelige, herunder C Shell (tcsh) og KORN-shellen (ksh).

Sådan får du adgang til Linux Shell

Generelt bruger du som en bruger dig med shell-programmet ved hjælp af et terminalemuleringsprogram som XTerm, konsole eller gnome-terminal.

Hvis du kører en Windows-manager som Openbox eller et skrivebordsmiljø som f.eks. GNOME eller KDE, finder du en terminalemulator enten fra en menu eller et dash. På mange systemer åbner også genvejen CTRL ALT og T et terminalvindue.

Alternativt kan du skifte til en anden TTY (teletypewriter), som giver direkte adgang til en kommandolinjeskal. Du kan gøre dette ved at trykke på CTRL ALT og F1 eller CTRL ALT og F2 etc.

Hvad er et Shell niveau

Når du kører en kommando i en shell, kører den på noget, der hedder shell-niveauet. Inden for en shell kan du åbne en anden shell, der gør det til en underskal eller den skal, der åbnede den.

Derfor skal moderskallen anses for at være niveau 1-skallen, og barneskallen ville være et niveau 2-skal.

Sådan viser du Shell-niveauet

Det bør ikke komme som en overraskelse baseret på artiklens titel, at den måde, hvorpå du kan se, hvilket shellniveau du kører i, er ved at bruge $ SHLVL-variablen.

Hvis du vil se det shellniveau, du kører i øjeblikket, skal du skrive følgende:

ekko $ SHLVL

Snarere interessant, hvis du kører ovenstående kommando i et terminalvindue, kan du blive overrasket over at se, at resultatet returneres er 2.

Hvis du dog kører samme kommando med tty så er resultatet 1.

Hvorfor er det sådan, du måske spørger? Nå er det skrivebordsmiljø, du kører, kørt oven på en shell. Den skal skal være niveau 1. Enhver terminalvindue, du åbner fra det skrivebordsmiljø, skal være et barn på skallen, der åbnede skrivebordsmiljøet, og derfor kan shellniveauet ikke starte med noget andet nummer end 2.

Tty'en kører ikke et skrivebordsmiljø og er derfor simpelthen en level 1 shell.

Sådan oprettes Subshells

Den nemmeste måde at teste begrebet skaller og subshells på er som følger. Åbn et terminalvindue og skriv følgende:

ekko $ SHLVL

Som vi ved fra et terminalvindue er mindste skalniveauet 2.

Indtast nu følgende i terminalvinduet:

sh

Sh-kommandoen på egen hånd kører en interaktiv skal, hvilket betyder at du bruger en shell inden for en shell eller en subshell.

Hvis du nu skriver det igen:

ekko $ SHLVL

Du vil se, at skalleniveauet er indstillet til 3. Kørsel af sh-kommandoen inde i underhulet åbner en delhul i underhulet, og så skal niveauet være på niveau 4.

Hvorfor er Shell-niveauet vigtigt?

Shell niveauet er vigtigt, når du tænker på omfanget af variabler i dine scripts.

Lad os starte med noget simpelt:

hund = Maisieecho $ hund

Hvis du kører ovenstående kommando i en skal, vises ordet maisie til terminalvinduet.

Åbn en ny skal ved at skrive følgende:

sh

Hvis du kører denne kommando, vil du se, at intet faktisk returneres:

echo $ hund

Det skyldes, at $ hundens variabel kun er tilgængelig på shell niveau 2. Hvis du skriver exit for at forlade subshell og køre echo $ hund igen, vises ordet maisie igen.

Det er også værd at tænke på opførelsen af ​​globale variabler inden for en shell.

Start i et nyt terminalvindue og skriv følgende:

eksport hund = maisieecho $ hund

Som du ville forvente, vises ordet maisie. Nu åbner du en subshell og skriver ekko $ hund igen. Denne gang vil du se, at ordet maisie vises, selv om du er i en underskala.

Årsagen til dette er, at eksportkommandoen lavede $ hundens variabel globalt. Ændring af hundens variabel i underskallet, selvom du bruger eksportkommandoen, har ingen indflydelse på dets moderskaller.

Forhåbentlig kan du se, at det at kende det skalniveau du arbejder i har en vis betydning, når du skriver scripts.

De eksempler, jeg har givet, er meget enkle, men det er ret almindeligt, at et shell script skal kalde et andet shell script, der igen kalder et andet shell script, som alle nu kører på forskellige niveauer. At kende shell niveauet kan være meget vigtigt.