Skip to main content

Vad är ett Linux Shell och vad är Shell nivåer?

There are No Forests on Earth ??? Really? Full UNBELIEVABLE Documentary -Multi Language (April 2025)

There are No Forests on Earth ??? Really? Full UNBELIEVABLE Documentary -Multi Language (April 2025)
Anonim

$ SHLVL-variabeln används för att berätta hur många skal du är djupt. Om du är förvirrad av detta är det värt att börja i början.

Vad är ett skal?

Ett skal tar kommandon och ger dem till det underliggande operativsystemet för att utföra. På de flesta Linux-system kallas Shell-programmet BASH (The Bourne Again Shell), men det finns andra tillgängliga, inklusive C Shell (tcsh) och KORN-skalet (ksh).

Så här kommer du åt Linux Shell

Vanligtvis, som användare, växlar du med skalprogrammet genom att använda ett terminalemuleringsprogram som XTerm, konsole eller GNOME-terminal.

Om du kör en Windows-hanterare som Openbox eller en skrivbordsmiljö som GNOME eller KDE hittar du en terminalemulator antingen från en meny eller en streckkod. På många system öppnar även genvägskortet CTRL ALT och T ett terminalfönster.

Alternativt kan du växla till en annan TTY (teletypskrivare) som ger direkt åtkomst till ett kommandoradsskal. Du kan göra detta genom att trycka på CTRL ALT och F1 eller CTRL ALT och F2 etc.

Vad är en Shell-nivå

När du kör ett kommando i ett skal kör det på något som kallas skalnivån. Inom ett skal kan du öppna ett annat skal som gör det till en delskal eller det skal som öppnade det.

Därför skulle moderskalet anses vara nivå 1-skalet och barnskalet skulle vara ett nivå 2-skal.

Så här visar du Shell-nivån

Det borde inte bli någon överraskning baserat på artikelns rubrik, så att du kan se vilken skalnivå du kör i genom att använda $ SHLVL-variabeln.

Om du vill se skalnivån du kör för tillfället skriver du in följande:

echo $ SHLVL

Snarare intressant om du kör ovanstående kommando inom ett terminalfönster kan du bli förvånad att se att resultatet returneras är 2.

Om du kör samma kommando med tty så är resultatet 1.

Varför är det här så kan du fråga? Jo skrivbordsmiljön du kör körs på toppen av ett skal. Det skalet skulle vara nivå 1. Varje terminalfönster du öppnar från den skrivbordsmiljön måste vara ett barn på skalet som öppnade skrivbordsmiljön och därför kan skalnivån inte starta med något annat nummer än 2.

Tty-enheten kör inte en skrivbordsmiljö och är därför helt enkelt ett nivå 1-skal.

Hur man skapar Subshells

Det enklaste sättet att testa begreppet skal och subshells är som följer. Öppna ett terminalfönster och skriv följande:

echo $ SHLVL

Som vi vet från ett terminalfönster är den minimala skalnivån 2.

Skriv nu följande i terminalfönstret:

sh

Sj-kommandot på egen hand kör ett interaktivt skal vilket innebär att du använder ett skal i ett skal eller en delhål.

Om du skriver in det här igen:

echo $ SHLVL

Du kommer att se att skalnivån är inställd på 3. Genom att köra kommandot sh från inuti skalet öppnas en delskal av delhöljet och så ska skalnivån vara på nivå 4.

Varför är Shell-nivå viktigt?

Skalnivån är viktig när du tänker på variablerna inom dina skript.

Låt oss börja med något enkelt:

hund = maisieecho $ hund

Om du kör ovanstående kommando i ett skal visas ordet maisie till terminalfönstret.

Öppna ett nytt skal genom att skriva följande:

sh

Om du kör det här kommandot ser du att ingenting faktiskt returneras:

echo $ hund

Det beror på att $ hundsvariabeln endast är tillgänglig på skal nivå 2. Om du skriver avstängning för att avsluta subshell och kör echo $ hund igen kommer ordet maisie att visas igen.

Det är också värt att tänka på beteendet hos globala variabler i ett skal.

Börja i ett nytt terminalfönster och skriv följande:

export hund = maisieecho $ hund

Som du förväntar dig visas ordet maisie. Öppna nu en subshell och skriv echo $ hund igen. Den här gången ser du att ordet Maisie visas även om du befinner dig i ett underhål.

Anledningen till detta är att exportkommandot gjorde $ hundsvariabel globalt. Ändra $ hundsvariabeln i underskalan även om du använder exportkommandot har ingen inverkan på dess moderskal.

Förhoppningsvis kan du se att det vet att skalnivån du arbetar med har viss betydelse när du skriver skript.

Exemplen jag har givit är mycket enkla men det är ganska vanligt att ett skalskript ringer ett annat skalskript som i sin tur kallar ett annat skalskript som alla kör nu på olika nivåer. Att veta skalnivån kan vara mycket viktigt.