Skip to main content

Hva er et Linux-skall og hva er Shell-nivåer?

Network marketing: Hvordan bruke sosiale media (April 2025)

Network marketing: Hvordan bruke sosiale media (April 2025)
Anonim

$ SHLVL-variabelen brukes til å fortelle deg hvor mange skall du er dypt. Hvis du er forvirret av dette, er det verdt å starte i begynnelsen.

Hva er et skall?

Et skall tar kommandoer og gir dem til det underliggende operativsystemet for å utføre. På de fleste Linux-systemer kalles Shell-programmet BASH (The Bourne Again Shell), men det finnes andre tilgjengelige, inkludert C Shell (tcsh) og KORN-skallet (ksh).

Slik får du tilgang til Linux Shell

Vanligvis, som bruker, samhandler du med skallprogrammet ved bruk av et terminalemuleringsprogram som XTerm, konsole eller gnome-terminal.

Hvis du kjører en Windows-leder som Openbox eller et skrivebordsmiljø som GNOME eller KDE, finner du en terminalemulator enten fra en meny eller en dash. På mange systemer vil snarveien CTRL ALT og T også åpne et terminalvindu.

Alternativt kan du bytte til en annen TTY (teletypewriter) som gir direkte tilgang til et kommandolinjeskall. Du kan gjøre dette ved å trykke på CTRL ALT og F1 eller CTRL ALT og F2 etc.

Hva er et Shell-nivå

Når du kjører en kommando i et skall, går det til noe som kalles skallnivået. Innenfor et skall kan du åpne et annet skall som gjør det til en delhull eller skallet som åpnet det.

Derfor ville foreldre skallet anses å være nivå 1 skallet og barneskallet ville være et nivå 2 skall.

Slik viser du Shell-nivået

Det bør ikke komme som en overraskelse basert på tittelen på artikkelen at måten du kan fortelle hvilket skallnivå du kjører i, er ved å bruke $ SHLVL-variabelen.

Hvis du vil se shellnivået du kjører for øyeblikket, skriver du inn følgende:

ekko $ SHLVL

Snarere interessant hvis du kjører kommandoen ovenfor i et terminalvindu, kan du bli overrasket over å se at resultatet returneres er 2.

Hvis du kjører samme kommando med tty, er resultatet 1.

Hvorfor er dette tilfelle du kanskje spør? Vel, det skrivebordsmiljø du kjører, kjøres på toppen av et skall. Det skallet skal være nivå 1. Eventuelle terminalvinduer du åpner fra det skrivebordsmiljøet, må være et barn på skallet som åpnet skrivebordsmiljøet, og derfor kan ikke skjermnivået starte med noe annet tall enn 2.

Ttyen kjører ikke et skrivebordsmiljø og er derfor bare et nivå 1 skall.

Slik lager du Subshells

Den enkleste måten å teste konseptet med skall og subshells er som følger. Åpne et terminalvindu og skriv inn følgende:

ekko $ SHLVL

Som vi vet fra et terminalvindu er minimumskallnivået 2.

Skriv inn følgende i terminalvinduet:

sh

Sh-kommandoen på egenhånd kjører et interaktivt skall som betyr at du bruker et skall i et skall eller en delhul.

Hvis du skriver inn dette igjen:

ekko $ SHLVL

Du vil se at skallnivået er satt til 3. Kjører sh-kommandoen fra underhulen åpner en delhull av underhullet, og så skal skallnivået være på nivå 4.

Hvorfor er Shell-nivået viktig?

Skallnivået er viktig når du tenker på omfanget av variabler i skriptene dine.

La oss starte med noe enkelt:

hund = Maisenekko $ hund

Hvis du kjører kommandoen ovenfor i et skall, vises ordet maisie til terminalvinduet.

Åpne et nytt skall ved å skrive følgende:

sh

Hvis du kjører denne kommandoen, vil du se at ingenting faktisk returneres:

ekko $ hund

Det skyldes at $ hundevariabelen kun er tilgjengelig på skallnivå 2. Hvis du skriver avkjøring for å avslutte delhulen og kjøre ekko $ hunden igjen, vises ordet maisie igjen.

Det er også verdt å tenke på oppførselen til globale variabler i et skall.

Start i et nytt terminalvindu og skriv inn følgende:

eksport hund = maisieekko $ hund

Som du forventer, vises ordet Maisie. Åpne nå en subshell og skriv ekko $ hunden igjen. Denne gangen vil du se at ordet Maisie vises, selv om du befinner deg i en subshell.

Årsaken til dette er at eksportkommandoen gjorde $ hundevariabel globalt. Endre $ hundevariabelen i underskjulet, selv om du bruker eksportkommandoen, har ingen innvirkning på parentesskjellene.

Forhåpentligvis kan du se at det å vite at skallnivået du jobber med, har noen betydning når du skriver skript.

Eksemplene jeg har gitt er svært enkle, men det er ganske vanlig at et shell-skript kaller et annet shell-skript som igjen kalles et annet skalskript, alle av dem kjører nå på forskjellige nivåer. Å vite shell nivået kan være svært viktig.