Skip to main content

Aske - Linux Command

You Must Know 20 Important Linux Commands (Kan 2024)

You Must Know 20 Important Linux Commands (Kan 2024)
Anonim

NAVN

sh - kommandotolk (skall)

SYNOPSIS

sh -/ + ACefnuvxIimqsVEbc -o longname -ord mål …

BESKRIVELSE

Sh er standard kommandotolk for systemet. Den nåværende versjonen avsh er i ferd med å bli endret for å være i overensstemmelse medPOSIX 1003.2 og 1003.2a spesifikasjoner for skallet. Denne versjonen har mange funksjoner som gjør at den i noen henseender ligner Korn-skallet, men det er ikke en Korn-skallklon (se ksh (1)). Bare funksjoner utpekt avPOSIX pluss noen få Berkeley-utvidelser, blir innlemmet i dette skallet. Vi forventerPOSIX Overholdelse av tiden 4.4 BSD er utgitt. Denne mansiden er ikke ment å være en opplæring eller en fullstendig beskrivelse av skallet.

Oversikt

Skallet er en kommando som leser linjer fra enten en fil eller terminalen, tolker dem og utfører generelt andre kommandoer. Det er programmet som kjører når en bruker logger seg inn i systemet (selv om en bruker kan velge et annet skall med kommandoen chsh (1)). Skallet implementerer et språk som har strømningskontrollkonstruksjoner, et makroanlegg som gir en rekke funksjoner i tillegg til datalagring, sammen med innebygd historie og linjedigeringsfunksjoner. Den inneholder mange funksjoner for å hjelpe interaktiv bruk og har fordelen at tolkespråket er vanlig for både interaktiv og ikke-interaktiv bruk (shell-skript). Det vil si, kommandoer kan skrives direkte til det løpende skallet eller kan settes inn i en fil, og filen kan utføres direkte av skallet.

påkallelse

Hvis ingen args er til stede, og hvis standardinngangen på skallet er koblet til en terminal (eller hvis -Jegflagget er satt), og -c alternativet er ikke til stede, skallet anses som et interaktivt skall. Et interaktivt skall ber generelt om hver kommando og håndterer programmerings- og kommandofeil annerledes (som beskrevet nedenfor). Når først startet, inspiserer skallet argument 0, og hvis det begynner med et dash `- ', blir skallet også ansett som et påloggingsskall. Dette gjøres vanligvis automatisk av systemet når brukeren logger inn først. Et påloggingsskall leser først kommandoer fra filene / etc / profile og .profile hvis de eksisterer. Hvis miljøvariabelenENV er satt ved oppføring til et skall, eller er angitt i .profilet av et påloggingsskall, leser skallet nå kommandoer fra filen oppkalt iENVDerfor bør en bruker legge kommandoer som skal utføres bare ved innloggingstid i .profilfilen, og kommandoer som utføres for hvert skall inne iENV fil. For å angiENV variabel til noen filer, plasser du følgende linje i ditt .profile i hjemmekatalogen din

ENV = $ HOME / .shinit; eksportere ENV

erstatter `` .shinit '' ethvert filnavn du ønsker. SidenENV filen leses for hvert anrop av skallet, inkludert shell-skript og ikke-interaktive skall, er følgende paradigme nyttig for å begrense kommandoer iENV fil til interaktive invokasjoner. Plasser kommandoer i `` saken '' og `` esac '' nedenfor (disse kommandoene beskrives senere):

saken $ - i * jeg *)

# kommandoer kun for interaktiv bruk

ESAC

Hvis kommandolinjeparametere i tillegg til alternativene er angitt, behandler skallet det første argumentet som navnet på en fil hvorfra man skal lese kommandoer (et skallskript), og de gjenværende argumentene settes som posisjonsparametrene til skallet ($ 1 , $ 2, etc). Ellers leser skallet kommandoer fra standardinngangen.

Argument List Processing

Alle enkeltbrevsalternativer har et tilsvarende navn som kan brukes som argument til -o alternativ. Settet -o navnet er oppgitt ved siden av enkeltbrevet alternativet i beskrivelsen nedenfor. Hvis du angir et dash `` - '', slår du på alternativet, mens du bruker et pluss `` + '' deaktiverer alternativet. Følgende alternativer kan settes fra kommandolinjen eller med settet (1) innebygd (beskrevet senere).

-en allexport

Eksporter alle variabler som er tildelt. (UNIMPLEMENTED for 4.4alpha)

-c

Les kommandoer fra kommandolinjen. Ingen kommandoer vil bli lest fra standardinngangen.

-C noclobber

Ikke overskriv eksisterende filer med ``> '' (UNIMPLEMENTED for 4.4alpha)

-e errexit

Hvis ikke, er det interaktivt, avslutte umiddelbart hvis en ubestemt kommando feiler. Utgangsstatusen til en kommando anses å være eksplisitt testet hvis kommandoen brukes til å kontrollere enhvis elifwhile ellerfør eller hvis kommandoen er den venstre håndoperandøren til en `` && '' eller `` || '' operatør.

-f noglob

Deaktiver utvidelse av stienavn.

-n noexec

Hvis ikke, interaktiv, les kommandoer, men ikke utfør dem. Dette er nyttig for å sjekke syntaksen til shell-skript.

-u nounset

Skriv en melding til standardfeil når du forsøker å utvide en variabel som ikke er angitt, og hvis skallet ikke er interaktivt, avslutter du umiddelbart. (UNIMPLEMENTED for 4.4alpha)

-V ordrik

Skallet skriver innspill til standardfeil som det er lest. Nyttig for feilsøking.

-x xtrace

Skriv hver kommando til standardfeil (før en `+ 'før den kjøres. Nyttig for feilsøking.

-q quietprofile

Hvis -v eller -x alternativer er angitt, ikke bruk dem når du leser initialiseringsfiler, disse er / etc / profile .profile og filen spesifisert avENV miljøvariabel.

-JEG ignoreeof

Ignorer EOFs fra input når det er interaktivt.

-Jeg interaktiv

Tving skallet til å oppføre seg interaktivt.

-m følge

Slå på jobbkontroll (sett automatisk når det er interaktivt).

-s stdin

Les kommandoer fra standardinngang (sett automatisk hvis det ikke finnes noen filargumenter). Dette alternativet har ingen effekt når det er satt etter at skallet allerede har begynt å kjøre (dvs. med settet (1)).

-V VI

Aktiver den innebygde vi (1) kommandolinjeditoren (deaktiverer -E hvis den er satt).

-E emacs

Aktiver den innebygde emacs (1) kommandolinjeditoren (deaktiverer -V hvis den er satt).

-b gi beskjed

Aktiver asynkron varsling av ferdiggjøring av bakgrunnsarbeid. (UNIMPLEMENTED for 4.4alpha)

Lexisk struktur

Skallet leser inn i form av linjer fra en fil og bryter det opp i ord på hvitt plass (mellomrom og faner), og i bestemte sekvenser av tegn som er spesielle for skallet kalt `` operatører ''. Det finnes to typer operatører: kontrolloperatører og omadresseringsoperatører (deres betydning diskuteres senere). Følgende er en liste over operatører:

"Kontrolloperatører:"

& && ( ) ; ;; | ||

"Omdirigeringsoperatør:"

< > >| << >> <& >& <<- <>

siterer

Quoting brukes til å fjerne den spesielle betydningen av visse tegn eller ord til skallet, for eksempel operatører, hvite rom eller nøkkelord. Det finnes tre typer anførselstegn: matchede single sitater, matchende dobbelte anførselstegn og backslash.

backslash

Et tilbakeslag beholder den bokstavlige betydningen av følgende karakter, med unntak av Aq newline. En tilbakeslag som foregår før en Aq-nylinje blir behandlet som en linjeforlengelse.

Enkelt sitater

Vedleggstegn i enkelt anførselstegn bevarer den bokstavlige betydningen av alle tegnene (unntatt enkelt anførselstegn, noe som gjør det umulig å sette enkelt anførselstegn i en enkeltnotert streng).

Double Quotes

Vedleggstegn i dobbelte anførselstegn beholder den bokstavelige betydningen av alle tegn bortsett fra dollar-tegn ($) backquote (`) og backslash () Backslashet i doble anførselstegn er historisk merkelig og tjener til å sitere kun følgende tegn:

$ `

Ellers forblir det bokstavelig.

Reserverte ord

Reserverte ord er ord som har spesiell betydning for skallet og er anerkjent i begynnelsen av en linje og etter en kontrolloperatør. Følgende er reserverte ord:

! TaElif Ta fi Ta mens Ta saken

ellers Tafor Ta så Ta {Ta}

gjør Tagjort Ta til Ta hvis Ta esac

Deres mening diskuteres senere.

aliaser

Et alias er et navn og tilsvarende verdi satt ved bruk av kommandoen alias (1) builtin. Når et reservert ord kan forekomme (se ovenfor), og etter å ha sjekket for reserverte ord, kontrollerer skallet ordet for å se om det samsvarer med et alias. Hvis det gjør det, erstatter det det i inngangsstrømmen med verdien. For eksempel, hvis det er et alias som heter `` lf '' med verdien `` ls -F '', så er inngangen:

lf foobar

ville bli

ls -F foobar

Aliaser gir en gunstig måte for naive brukere å lage shorthands for kommandoer uten å måtte lære å lage funksjoner med argumenter. De kan også brukes til å lage leksisk uklar kode. Denne bruken er motet.

kommandoer

Skallet tolker ordene som det leser i henhold til et språk, hvis spesifikasjon ligger utenfor denne manns side (se BNF iPOSIX 1003.2 dokument). I hovedsak skjønt, en linje leses og hvis det første ordet av linjen (eller etter en kontrolloperatør) ikke er et reservert ord, så har skallet gjenkjent en enkel kommando. Ellers kan en kompleks kommando eller en annen spesiell konstruksjon være blitt gjenkjent.

Enkle kommandoer

Hvis en enkel kommando er blitt gjenkjent, utfører skallet følgende handlinger:

  1. Ledende ord i skjemaet `` name = value '' er avskåret og tilordnet miljøet av den enkle kommandoen. Omdirigeringsoperatører og deres argumenter (som beskrevet nedenfor) fjernes og lagres for behandling.

  2. De resterende ordene blir utvidet som beskrevet i avsnittet «Expansions», og det første gjenværende ordet betraktes som kommandoenavnet og kommandoen er plassert. De resterende ordene betraktes som argumenter for kommandoen. Hvis ingen kommandoenavn resulterte, påvirker variabeltegnene `` navn = verdi '' som er gjengitt i punkt 1 det nåværende skallet.

  3. Omadresseringer utføres som beskrevet i neste avsnitt.

omadresseringer

Omdirigeringer brukes til å endre hvor en kommando leser innspill eller sender utdata. Generell omdirigeringer åpner, lukker eller dupliserer en eksisterende referanse til en fil. Det overordnede formatet som brukes til omadressering er:

n redir-op-fil

hvor redir-op er en av omadresseringsoperatørene nevnt tidligere. Følgende er en liste over mulige omdirigeringer. Bq n er et valgfritt tall, som i `3 '(ikke` Bq 3' som refererer til en filbeskrivelse.

n> fil

Omdirigere standardutgang (eller n) til fil.

n> | fil

Samme, men overstyre -C alternativ.

n >> fil

Legg til standardutgang (eller n) til fil.

n <fil

Viderekoble standardinngang (eller n) fra fil.

n1 <& n2

Dupliser standardinngang (eller n1) fra filbeskrivelsen n2.

n <& -

Lukk standardinngang (eller n).

n1> & n2

Kopier standard utgang (eller n1) fra n2.

n> og -

Lukk standardutgang (eller n).

n <> fil

Åpne fil for lesing og skriving på standardinngang (eller n).

Følgende omadressering kalles ofte et `` her-dokument ''

n << delimiter

her-doc-tekst …

delimiter

All tekst på påfølgende linjer opp til avgrenseren lagres vekk og gjøres tilgjengelig for kommandoen på standardinngang, eller filbeskrivelse n hvis den er angitt.Hvis avgrenseren som angitt på startlinjen er sitert, behandles her-doc-teksten bokstavelig talt, ellers blir teksten utsatt for parameterutvidelse, kommandosubstitusjon og aritmetisk utvidelse (som beskrevet i avsnittet om `` Utvidelser '). 'Hvis operatøren er `` << -' 'i stedet for `` <<' ', blir ledende faner i her-doc-teksten fjernet.

Søk og utførelse

Det finnes tre typer kommandoer: skallfunksjoner, innebygde kommandoer og normale programmer - og kommandoen blir søkt etter (etter navn) i den rekkefølgen. De utføres hverandre på en annen måte.

Når en skallfunksjon utføres, blir alle posisjonsparametrene for shell (unntatt $ 0, som forblir uendret) satt til argumentene for skallfunksjonen. Variablene som er eksplisitt plassert i kommandos miljø (ved å plassere oppgaver til dem før funksjonsnavnet) blir gjort lokale til funksjonen og er satt til de oppgitte verdiene. Da blir kommandoen gitt i funksjonsdefinisjonen utført. Posisjonsparametrene blir gjenopprettet til de opprinnelige verdiene når kommandoen fullføres. Alt dette skjer i det nåværende skallet.

Shell builtins blir utført internt til skallet, uten å gyte en ny prosess.

Ellers, hvis kommandoenavnet ikke samsvarer med en funksjon eller innebygd, blir kommandoen søkt etter som et normalt program i filsystemet (som beskrevet i neste avsnitt). Når et normalt program utføres, kjører programmet shell programmet, og overfører argumentene og miljøet til programmet. Hvis programmet ikke er en vanlig kjørbar fil (dvs. hvis den ikke begynner med "magisk nummer" hvisASCII representasjon er "#!", så execve (2) returnerer Er ENOEXEC da) skal skallet tolke programmet i en subshell. Barneskallet vil gjenopprette seg selv i dette tilfellet, slik at effekten vil bli som om et nytt skall hadde blitt påkalt for å håndtere ad hoc-skriptet, bortsett fra at plasseringen av hashed-kommandoer plassert i foreldre skallet vil bli husket av barn.

Vær oppmerksom på at tidligere versjoner av dette dokumentet og kildekoden i seg selv er misvisende og sporadisk refererer til et skalskript uten et magisk nummer som en "shellprosedyre".

Banesøk

Når du finner en kommando, ser skalet først for å se om det har en skallfunksjon med det navnet. Deretter ser det etter en innebygd kommando med det navnet. Hvis en innebygd kommando ikke er funnet, skjer en av to ting:

  1. Kommandonavn som inneholder en skråstrek, utføres bare uten å utføre noen søk.

  2. Skallet søker etter hver oppføring iSTI i sin tur for kommandoen. Verdien avSTIvariabel skal være en serie med oppføringer adskilt av kolon. Hver oppføring består av et katalognavn. Den nåværende katalogen kan angis implisitt av et tomt katalognavn, eller eksplisitt av en enkelt periode.

Kommandoutgangsstatus

Hver kommando har en utgangsstatus som kan påvirke oppførselen til andre skallkommandoer. Paradigmet er at en kommando går ut med null for normal eller suksess, og ikke-null for feil, feil eller en falsk indikasjon. Mannsiden for hver kommando skal indikere de ulike utgangskodene og hva de mener. I tillegg returnerer de innebygde kommandoene utgangskoder, som gjør en utført shell-funksjon.

Komplekse kommandoer

Komplekse kommandoer er kombinasjoner av enkle kommandoer med kontrolloperatører eller reserverte ord, sammen å skape en større kompleks kommando. Mer generelt er en kommando en av følgende:

  • enkel kommando
  • rørledning
  • liste eller sammensatte liste
  • sammensatte kommando
  • funksjonsdefinisjon

Med mindre annet er oppgitt, er utgangsstatusen til en kommando den for den siste enkle kommandoen som utføres av kommandoen.

rørledninger

En rørledning er en sekvens av en eller flere kommandoer skilt av kontrolloperatøren |. Standardutgangen for alle, men den siste kommandoen, er koblet til standardinngangen til neste kommando. Standardutgangen fra den siste kommandoen er arvet fra skallet, som vanlig.

Formatet for en rørledning er:

! command1 | command2 …

Standardutgangen til kommando1 er koblet til standardinngangen til kommandoen2. Standardinngangen, standardutgangen eller begge kommandoen anses å være tilordnet av rørledningen før noen omdirigering spesifisert av omadresseringsoperatører som er en del av kommandoen.

Hvis rørledningen ikke er i bakgrunnen (diskutert senere), venter skallet på at alle kommandoene skal fullføres.

Hvis det reserverte ord! går ikke ut for rørledningen, utgangsstatusen er utgangsstatus for den siste kommandoen som er angitt i rørledningen. Ellers er utgangsstatusen den logiske IKKE av avslutningsstatusen til den siste kommandoen. Det vil si, hvis den siste kommandoen returnerer null, er utgangsstatusen 1; Hvis den siste kommandoen returnerer større enn null, er utgangsstatusen null.

Fordi pipeline tildeling av standardinngang eller standardutgang eller begge foregår før omdirigering, kan den endres ved omdirigering. For eksempel:

$ command1 2> & 1 | Command2

sender både standardutgang og standardfeil av kommandoen1 til standardinngangen til kommandoen2.

A; eller terminator forårsaker at den forrige AND-OR-listen (beskrevet neste) utføres i rekkefølge; a & forårsaker asynkron utførelse av den forrige AND-OR-listen.

Merk at i motsetning til noen andre skall er hver prosess i rørledningen et barn av påkallingsskallet (med mindre det er et skall innbygget, i hvilket tilfelle det utføres i det nåværende skallet - men enhver effekt det har på miljøet blir slettet).

Bakgrunnskommandoer -

Hvis en kommando blir avsluttet av kontrolloperatøren ampersand (&), utfører skallet kommandoen asynkront - det vil si at skallet ikke venter på at kommandoen skal fullføres før du utfører neste kommando.

Formatet for å kjøre en kommando i bakgrunnen er:

command1 & command2 & …

Hvis skallet ikke er interaktivt, er standardinngangen til en asynkron kommando satt til / dev / null

Lister - Generelt snakker

En liste er en sekvens av null eller flere kommandoer skilt av nye linjer, semikoloner eller ampersands, og eventuelt avsluttet av en av disse tre tegnene. Kommandoene i en liste utføres i den rekkefølgen de er skrevet. Hvis kommandoen etterfølges av en ampersand, starter skallet kommandoen og går videre til neste kommando; ellers venter det på at kommandoen skal avslutte før du fortsetter til neste.

Kortslutningsoperatører

`` && '' og `` || '' er AND-OR listoperatører. `` && '' kjører den første kommandoen, og kjører deretter den andre kommandoen iff, utgangsstatusen til den første kommandoen er null. `` || '' er lik, men utfører den andre kommandoen iff utgangsstatusen til den første kommandoen er ikke-null. `` && '' og `` || '' begge har samme prioritet.

Flow-Control Constructs - hvis, mens, for, tilfelle

Syntaxen til if-kommandoen er

hvis listen

deretter liste

elif liste

så liste …

annet liste

fi

Syntaxen av den mens kommandoen er

mens listen

gjøre liste

ferdig

De to listene utføres gjentatte ganger, mens utgangsstatusen til den første listen er null. Inntil kommandoen er lik, men har ordet til i stedet for, noe som får det til å gjenta til utgangsstatusen til den første listen er null.

Syntaxen til kommandoen er

for variabel i ord …

gjøre liste

ferdig

Ordene er utvidet, og deretter utføres listen flere ganger med variabelen satt til hvert ord i sin tur. gjør og gjort kan erstattes med `` {'' og ``} ''

Syntaxen til pause og fortsett kommandoen er

pause num

fortsett num

Pause avslutter nummeret innerste for eller mens sløyfer. Fortsett fortsetter med neste iterasjon av den innerste sløyfen. Disse implementeres som innebygde kommandoer.

Syntaxen til saks kommandoen er

saksord i

mønster) liste ;;

ESAC

Mønsteret kan faktisk være ett eller flere mønstre (se Shell Patterns beskrevet senere), skilt av `` '' tegn.

Gruppering av kommandoer sammen

Kommandoer kan grupperes ved å skrive enten

(liste)

eller

{list;

Den første av disse utfører kommandoene i en subshell. Innebygde kommandoer gruppert i en (liste) påvirker ikke det nåværende skallet. Den andre formen gaffel ikke et annet skall, så det er litt mer effektivt. Gruppering av kommandoer sammen på denne måten lar deg omdirigere utdataene deres som om de var ett program:

{printf hallo; printf world n ";}> hilsen

funksjoner

Syntaksen til en funksjonsdefinisjon er

navn () kommando

En funksjonsdefinisjon er en kjørbar setning; når den utføres installerer den en funksjon som heter navn og returnerer en utgangsstatus på null. Kommandoen er normalt en liste som er vedlagt mellom `` {'' og ``} ''

Variabler kan bli erklært å være lokale for en funksjon ved å bruke en lokal kommando. Dette skal vises som den første setningen av en funksjon, og syntaksen er

lokal variabel | - …

Lokal er implementert som en innebygd kommando.

Når en variabel blir gjort lokalt, arver den den opprinnelige verdien og eksporteres og readonly flagger fra variabelen med samme navn i det omkringliggende omfanget, hvis det er en. Ellers er variabelen frakoblet. Skallet bruker dynamisk scoping, slik at hvis du gjør variabelen x lokalt til funksjon f, som deretter kalles funksjon g, refererer til variabelen x gjort inne g vil referere til variabelen x deklarert inne f, ikke til den globale variabelen kalt x .

Den eneste spesielle parameteren som kan gjøres lokalt, er `` - '' Making `` '' 'lokale eventuelle shellalternativer som endres via den angitte kommandoen inne i funksjonen som skal gjenopprettes til de opprinnelige verdiene når funksjonen returnerer.

Syntaksen til returkommandoen er

returnere exitstatus

Den avslutter den gjeldende kjøringsfunksjonen. Retur er implementert som en innebygd kommando.

Variabler og parametere

Skallet opprettholder et sett med parametere. En parameter betegnet med et navn kalles en variabel. Ved oppstart skifter skallet alle miljøvariablene inn i shellvariabler. Nye variabler kan settes ved hjelp av skjemaet

name = verdi

Variabler angitt av brukeren må ha et navn som består utelukkende av alfabetiske, numeriske og understreker - den første må ikke være numerisk. En parameter kan også betegnes med et tall eller et spesialtegn som forklart nedenfor.

Posisjonelle parametere

En posisjonsparameter er en parameter betegnet med et tall (n> 0). Skallet setter disse innledningsvis til verdiene av dens kommandolinjeparametre som følger navnet på skalskriptet. Settet (1) innebygd kan også brukes til å sette eller nullstille dem.

Spesielle parametere

En spesiell parameter er en parameter betegnet med ett av følgende spesialtegn. Verdien av parameteren er oppført ved siden av tegnet.

*

Utvider til posisjonsparametrene, fra en. Når ekspansjonen skjer i en dobbelkvitert streng, ekspanderer den til et enkelt felt med verdien av hver parameter, skilt med den første tegn avIFS variabel, eller ved a hvisIFS er avstengt.

@

Utvider til posisjonsparametrene, fra en.Når ekspansjonen skjer i dobbeltkviteringer, utvides hver posisjonsparameter som et eget argument. Hvis det ikke er noen posisjonsparametre, genererer utvidelsen av @ null nullargumenter, selv når @ er dobbeltnotert. Hva dette egentlig betyr, er for eksempel at $ 1 er `` abc '' og $ 2 er `` def ghi '' og Qq $ @ ekspanderer til de to argumentene:

abc def ghi

#

Utvider til antall posisjonsparametere.

?

Utvider til utgangsstatus for den nyeste rørledningen.

- (Hyphen.)

Utvider til de nåværende alternativflaggene (alternativene for enkeltbokstavsopsjoner sammenføyt til en streng) som angitt ved påkalling, ved den innebygde kommandoen eller implicit av skallet.

$

Utvider til prosess-ID for det påkalte skallet. En subshell beholder samme verdi på $ som sin overordnede.

!

Utvider til prosess-ID for den nyeste bakgrunnskommandoen utført fra det nåværende skallet. For en rørledning er prosess-ID den for den siste kommandoen i rørledningen.

0 (null.)

Utvider til navnet på skallet eller shell-skriptet.

Ordutvidelser

Denne klausulen beskriver de ulike utvidelsene som utføres på ord. Ikke alle utvidelser utføres på hvert ord, som forklart senere.

Tilde-utvidelser, parameterutvidelser, kommandosubstitusjoner, aritmetiske utvidelser og quote-fjerninger som forekommer i et enkelt ord, utvides til et enkelt felt. Det er bare feltdeling eller utvidelse av stienavn som kan skape flere felt fra et enkelt ord. Det eneste unntaket fra denne regelen er utvidelsen av den spesielle parameteren @ i dobbeltkvoter, som beskrevet ovenfor.

Ordreekspansjonen er:

  1. Tilde Expansion, Parameter Expansion, Command Substitution, Aritmetisk Utvidelse (disse skjer alle samtidig).

  2. Feltbrudd utføres på felt som genereres av trinn (1) med mindreIFS variabel er null.

  3. Pathname Expansion (med mindre sett -f er i kraft).

  4. Sitat fjerning.

$ Tegn brukes til å presentere parameterutvidelse, kommandosubstitusjon eller aritmetisk evaluering.

Tilde Expansion (erstatter brukerens hjemmekatalog)

Et ord som begynner med et unotert tilde tegn (~) er utsatt for tilde ekspansjon. Alle tegnene opp til et skråstrek (/) eller enden av ordet blir behandlet som brukernavn og erstattes med brukerens hjemmekatalog. Hvis brukernavnet mangler (som i ~ / foobar) erstattes tilde med verdien av HJEM variabel (den nåværende brukerens hjemmekatalog).

Parameterutvidelse

Formatet for parameterutvidelse er som følger:

$ {} Uttrykk

hvor uttrykket består av alle tegn til det matchende ``} '' Alle ``} '' rømt av et tilbakeslag eller i en sitert streng, og tegn i innebygde aritmetiske utvidelser, kommandosubstitusjoner og variable utvidelser blir ikke undersøkt ved bestemmelse av matchende ``} ''

Den enkleste form for parameterutvidelse er:

$ {} Parameter

Verdien, hvis noen, av parameteren er erstattet.

Parameternavnet eller symbolet kan være innelukket i braces, som er valgfrie bortsett fra posisjonsparametere med mer enn ett siffer eller når parameteren etterfølges av et tegn som kan tolkes som en del av navnet. Hvis en parameterutvidelse forekommer inne i dobbelt-sitater:

  1. Utvidelse av stedsnavn utføres ikke på resultatene av utvidelsen.

  2. Feltfordeling utføres ikke på resultatene av utvidelsen, med unntak av @.

I tillegg kan en parameterutvidelse endres ved å bruke ett av følgende formater.

$ {Parameter: -word}

Bruk standardverdier. Hvis parameteren er frakoblet eller null, er utvidelsen av ordet erstattet; ellers er verdien av parameteren erstattet.

$ {Parameter: = ord}

Tilordne standardverdier. Hvis parameteren er frakoblet eller null, er utvidelsen av ord tilordnet parameter. I alle tilfeller er den endelige verdien av parameteren erstattet. Bare variabler, ikke posisjonsparametere eller spesielle parametre, kan tilordnes på denne måten.

$ {Parameter:? Ord}

Angi Feil hvis Null eller Unset. Hvis parameteren er frakoblet eller null, er utvidelsen av ord (eller en melding som indikerer at den er slått av hvis et ord utelates) skrevet til standardfeil, og skallet utgår med en ikke-null avslutningsstatus. Ellers er verdien av parameteren erstattet. Et interaktivt skall trenger ikke avslutte.

$ {Parameter: + ord}

Bruk alternativ verdi. Hvis parameteren er frakoblet eller null, er null erstattet; ellers er utvidelsen av ordet erstattet.

I parameterutvidelsene vist tidligere, resulterer bruken av kolon i formatet en test for en parameter som er frakoblet eller null; utelatelse av tykktarmen resulterer i en test for en parameter som bare er avbrudd.

$ {} # Parameter

Strenglengde. Lengden i tegn til verdien av parameteren.

Følgende fire varianter av parameterutvidelse sørger for substringbehandling. I hvert tilfelle brukes mønster matching notasjon (se Shell Patterns), i stedet for vanlig uttrykk notasjon, å evaluere mønstrene. Hvis parameteren er * eller @, er resultatet av utvidelsen uspesifisert. Ved å legge inn full-parameterutvidelsestrengen i dobbeltkviteringer forårsaker ikke følgende fire varianter av mønsterfigurer, mens citerte tegn i bøylene har denne effekten.

$ {Parameter%} ord

Fjern minsteste suffix-mønster. Ordet er utvidet for å produsere et mønster. Parameterutvidelsen resulterer så i parameter, med den minste delen av suffikset samsvaret med mønsteret slettet.

$ {Parameter %% ord}

Fjern største suffix-mønster.Ordet er utvidet for å produsere et mønster. Parameterutvidelsen resulterer da i parameter, med den største delen av suffikset samsvaret med mønsteret slettet.

$ {Parameter ord}

Fjern minste prefiksmønster. Ordet er utvidet for å produsere et mønster. Parameterutvidelsen resulterer så i parameter, med den minste delen av prefikset matchet av mønsteret slettet.

$ {Parameter ## ord}

Fjern det største prefiksmønsteret. Ordet er utvidet for å produsere et mønster. Parameterutvidelsen resulterer da i parameter, med den største delen av prefikset matchet av mønsteret slettet.

Kommandosubstitusjon

Kommandosubstitusjon gjør at utgangen av en kommando kan erstattes i stedet for kommandoenavnet selv. Kommandosubstitusjon skjer når kommandoen er vedlagt som følger:

$ (Kommando)

eller Po`` tilbakekodet '' versjon Pc:

`command`

Skallet utvider kommandosubstitusjonen ved å utføre kommandoen i et subshell-miljø og erstatte kommandosubstitusjonen med standardutgangen av kommandoen, fjerne sekvenser av en eller flere s på slutten av substitusjonen. (En del av s før slutten av utgangen ikke fjernes; Men under feltoppdeling kan de oversettes til s, avhengig av verdien avIFS og citerer det som er i kraft.)

Aritmetisk utvidelse

Aritmetisk ekspansjon gir en mekanisme for å evaluere et aritmetisk uttrykk og erstatte dets verdi. Formatet for aritmetisk utvidelse er som følger:

$ ((Uttrykk))

Ekspresjonen blir behandlet som om den var i dobbelt-sitater, bortsett fra at et dobbelt-quote inne i uttrykket ikke behandles spesielt. Skallet utvider alle tokens i uttrykket for parameterutvidelse, kommandosubstitusjon og fjerning av tilbud.

Deretter behandler skallet dette som et aritmetisk uttrykk og erstatter verdien av uttrykket.

White Space Splitting (Field Splitting)

Etter parameterutvidelse, kommandosubstitusjon og aritmetisk ekspansjon skanner skannet resultatene av utvidelser og substitusjoner som ikke skjedde i dobbeltkryss for feltoppdeling, og det kan oppstå flere felt.

Skallet behandler hver karakter avIFS som en avgrenser og bruk avgrensningene til å dele resultatene av parameterutvidelse og kommandosubstitusjon i felt.

Pathname Expansion (filnavn generasjon)

Med mindre -f flagg er satt, genereres filnavn etter at orddeling er fullført. Hvert ord blir sett på som en serie mønstre, skilt av skråstreker. Ekspansjonsprosessen erstatter ordet med navnene på alle eksisterende filer hvis navn kan dannes ved å erstatte hvert mønster med en streng som samsvarer med det angitte mønsteret. Det er to begrensninger på dette: først kan et mønster ikke matche en streng som inneholder et skråstrek, og for det andre kan et mønster ikke matche en streng som begynner med en periode med mindre mønsterets første tegn er en periode. I neste avsnitt beskrives mønstrene som brukes for både Pathname Expansion og case (1) -kommandoen.

Shell Patterns

Et mønster består av normale tegn, som matcher seg selv og meta-tegn. Meta-tegnene er `` `` `` `* ''` `? '' Og` `'' Disse tegnene mister sine spesielle betydninger hvis de er sitert. Når kommando- eller variabel substitusjon utføres, og dollartegn eller tilbakestillingskvoter ikke er dobbeltnotert, blir verdien av variabelen eller utgangen av kommandoen skannet for disse tegnene, og de blir omgjort til metategn.

En stjerne (`` * '') samsvarer med en hvilken som helst streng med tegn. Et spørsmålstegn samsvarer med et enkelt tegn. En venstre brakett (`` '') introduserer en tegnklasse. Slutten på karakterklassen er indikert av et (`` '') hvis `` 'mangler, da `` ' 'samsvarer med et `` ' 'i stedet for å innføre en tegnklasse. En tegneserie samsvarer med noen av tegnene mellom de firkantede parentesene. En rekke tegn kan spesifiseres ved hjelp av et minustegn. Karakterklassen kan suppleres ved å lage et utropstegn for karakterklassens første karakter.

For å inkludere en `` 'i en karakterklasse, gjør den det første tegnet oppført (etter ``!' 'Hvis det er noe). For å inkludere et minustegn, gjør du det første eller siste tegn som er oppført

builtins

Denne delen viser de innebygde kommandoene som er innebygd fordi de trenger å utføre en operasjon som ikke kan utføres av en separat prosess. I tillegg til disse er det flere andre kommandoer som kan bygges for effektivitet (for eksempel ekko 1).

:

En null-kommando som returnerer en 0 (sann) exit-verdi.

. fil

Kommandoene i den angitte filen leses og utføres av skallet.

alias Navn = streng …

Hvis name = streng er spesifisert, skal skallet definere aliaset Navn med verdi string Hvis bare Navn er angitt, verdien av aliaset Navn er trykt. Ingen argumenter, denalias builtin skriver ut navnene og verdiene til alle definerte aliaser (seunalias)

bg jobb …

Fortsett de angitte jobbene (eller gjeldende jobb hvis ingen jobber er gitt) i bakgrunnen.

kommando kommando arg …

Kjør den angitte innebygde kommandoen. (Dette er nyttig når du har en shell-funksjon med samme navn som en innebygd kommando.)

cd katalog

Bytt til spesifisert katalog (standard$ HOME) Hvis en oppføring forCDPATH vises i miljøet tilcd kommando eller skallvariabelenCDPATH er satt og katalognavnet begynner ikke med et skråstrek, da katalogene som er oppført iCDPATH vil bli søkt etter den angitte katalogen. Formatet avCDPATH er det samme som forSTI I et interaktivt skall, dencd kommandoen vil skrive ut navnet på katalogen som den faktisk har byttet til hvis dette er forskjellig fra navnet som brukeren ga. Disse kan være forskjellige, enten fordiCDPATH mekanisme ble brukt eller fordi en symbolsk lenke ble krysset.

eval streng …

Sammenkoble alle argumenter med mellomrom. Deretter re-parse og utfør kommandoen.

exec kommando arg …

Med mindre kommandoen utelates, erstattes skallprosessen med det angitte programmet (som må være et reelt program, ikke et skall innbygget eller funksjon). Eventuelle omdirigeringer påexeckommandoen er merket som permanent, slik at de ikke utelates nårexec kommandoen er ferdig.

exit exitstatus

Avslutt skallprosessen. Hvis exitstatus er gitt det brukes som utgangsstatus for skallet; ellers blir utgangsstatusen for den foregående kommandoen brukt.

eksport Navn…

eksport -p

De angitte navnene blir eksportert slik at de vil vises i miljøet av påfølgende kommandoer. Den eneste måten å unexportere en variabel på er å deaktivere den. Skallet lar verdien av en variabel settes samtidig som den eksporteres ved å skrive

eksportnavn = verdi

Uten argumenter listes eksportkommandoen navnene på alle eksporterte variabler. Med -palternativ angitt vil utdata formateres hensiktsmessig for ikke-interaktiv bruk.

fc-e redaktør først siste

fc-l -nr først siste

fc-s gammel = new først

Defc Innebygde lister, eller redigeringer og reekvesteringer, kommandoer som tidligere er skrevet inn i et interaktivt skall.

-E redaktør

Bruk redigeringen kalt av redaktør for å redigere kommandoene. Redigeringsstrengen er et kommandoenavn, underlagt søk viaSTI variabel. Verdien iFCEDIT variabel brukes som standard når -e er ikke spesifisert. HvisFCEDIT er null eller unset, verdien avREDAKTØR variabel brukes. HvisREDAKTØR er null eller unset, ed (1) brukes som redigeringsprogram.

-l (ell)

Oppgi kommandoene i stedet for å påkalle en redigerer på dem. Kommandoene er skrevet i sekvensen angitt av de første og siste operandene, som påvirket av -r med hver kommando foran kommandoenummeret.

-n

Undertrykk kommandonumre når du lister med -l.

-r

Omvendt rekkefølgen på kommandoene som er oppført (med -l eller redigert (med heller ikke -l eller -s)

-s

Gjenta kommandoen uten å påberope en redigerer.

først

siste

Velg kommandoene for å liste eller redigere. Antall tidligere kommandoer som kan nås, bestemmes av verdien avHISTSIZE variabel. Verdien av første eller siste eller begge er en av følgende:

+ Nummer

Et positivt tall som representerer et kommandonummer; kommandonumre kan vises med -l alternativ.

-Nummer

Et negativt desimalnummer som representerer kommandoen som ble utført antall kommandoer tidligere. For eksempel er -1 den umiddelbart forrige kommandoen.

string

En streng som indikerer den sist innførte kommandoen som begynner med den strengen. Hvis den gamle = nye operand ikke er spesifisert med -s strengformen til den første operand kan ikke inneholde et innebygd likestegn.

Følgende miljøvariabler påvirker utførelsen av fc:

FCEDIT

Navn på redaktøren som skal brukes.

HISTSIZE

Antall tidligere kommandoer som er tilgjengelige.

fg jobb

Flytt den angitte jobben eller gjeldende jobb til forgrunnen.

getopts optstring var

DePOSIX getopts kommando, ikke å forveksle med Bell Labs -derived getopt (1).

Det første argumentet bør være en serie med bokstaver, som hver kan være valgfritt etterfulgt av et kolon for å indikere at alternativet krever et argument. Den angitte variabelen er satt til det analyserte alternativet.

Degetopts kommandoen deaktiverer det eldre getopt (1) verktøyet på grunn av dets håndtering av argumenter som inneholder hvite rom.

Degetopts builtin kan brukes til å skaffe alternativer og deres argumenter fra en liste over parametere. Når påkalt,getopts plasserer verdien av det neste alternativet fra alternativstrengen i listen i skalvariabelen spesifisert av Var og det er indeks i skallvariabelenOPTIND Når skallet påberopes,OPTIND er initialisert til 1. For hvert alternativ som krever et argument, skalgetopts innebygd vil plassere den i skallvariabelenOPTARG Hvis et alternativ ikke er tillatt for i optstring deretterOPTARG vil bli avstengt.

optstring er en rekke anerkjente valgbokstaver. Hvis et brev etterfølges av et kolon, forventes alternativet å ha et argument som kan eller ikke skal skilles fra det med hvitt mellomrom. Hvis et alternativtegn ikke er funnet der forventet,getopts vil angi variabelen Var til en ``? ''getopts vil da avinstalleresOPTARG og skriv utdata til standardfeil. Ved å spesifisere en kolon som den første tegnet av optstring alle feilene blir ignorert.

En ikke-null verdi returneres når det siste alternativet er nådd. Hvis det ikke er noen gjenværende argumenter,getopts vil sette Var til det spesielle alternativet, `` - '' ellers vil den sette Var til ``? ''

Følgende kodefragment viser hvordan man kan behandle argumentene for en kommando som kan ta alternativene a og b og alternativet c som krever et argument.

mens getopts abc: fgjøresaken $ f ia | b) flagg = $ f ;;c) carg = $ OPTARG ;;?) echo $ USAGE; utgang 1;ESACferdigskift `expr $ OPTIND - 1`

Denne koden vil akseptere noe av følgende som tilsvarende:

cmd -acarg filfilcmd-a-c arg filfilcmd -carg -a filfilcmd-a-carg - filfil

hash-rv kommando…

Skallet opprettholder et hashbord som husker plasseringene til kommandoer. Uten argumenter, denhash kommandoen skriver ut innholdet i denne tabellen. Oppføringer som ikke har blitt sett på siden sistcd kommandoen er merket med en stjerne; Det er mulig at disse oppføringene er ugyldige.

Med argumenter,hash kommandoen fjerner de angitte kommandoene fra hashbordet (med mindre de er funksjoner) og deretter lokaliserer dem. Med -v alternativ, hash skriver plasseringene av kommandoene som den finner dem. The -r alternativet får hash-kommandoen til å slette alle oppføringene i hash-tabellen, bortsett fra funksjoner.

jobid jobb

Skriv ut prosess-ID-ene for prosessene i jobben. Hvis jobb Argumentet utelates, den nåværende jobben brukes.

arbeidsplasser

Denne kommandoen viser alle bakgrunnsprosessene som er barn i den nåværende shellprosessen.

pwd

Skriv ut gjeldende katalog. Den innebygde kommandoen kan avvike fra programmet med samme navn fordi den innebygde kommandoen husker hva gjeldende katalog er, snarere enn å omregistrere det hver gang. Dette gjør det raskere. Men hvis den nåværende katalogen omdøpes, er den innebygde versjonen avpwd vil fortsette å skrive ut det gamle navnet på katalogen.

lese-p prompt -r variabel …

Prompten skrives ut dersom -p alternativet er angitt og standardinngangen er en terminal. Deretter leses en linje fra standardinngangen. Den etterfølgende linjen blir slettet fra linjen, og linjen er delt som beskrevet i avsnittet om orddeling over, og stykkene tilordnes variablene i rekkefølge. Minst én variabel må spesifiseres. Hvis det er flere brikker enn variabler, de resterende brikkene (sammen med tegnene iIFS som skilt dem) er tilordnet den siste variabelen. Hvis det er flere variabler enn stykker, tildeles de gjenværende variablene nullstrengen. Delese innebygd vil indikere suksess med mindre EOF oppstår på inngang, i hvilket tilfelle feilen returneres.

Som standard, med mindre -r alternativet er angitt, vil tilbakeslaget `` '' fungere som et fluktegn, som forårsaker at følgende karakter behandles bokstavelig. Hvis en backslash etterfølges av en ny linje, vil tilbakestrek og ny linje bli slettet.

skrivebeskyttet Navn…

readonly -p

De angitte navnene er merket som skrivebeskyttet, slik at de ikke kan endres eller deaktiveres senere. Skallet lar verdien av en variabel settes samtidig som den er merket skrivebeskyttet ved skriving

readonly navn = verdi

Uten argumenter lister den lette kommandoen navnene på alle skrivebeskyttede variabler. Med -p alternativ angitt vil utdata formateres hensiktsmessig for ikke-interaktiv bruk.

sett { -alternativer | + alternativer | - arg …

Desett kommandoen utfører tre forskjellige funksjoner.

Uten argumenter listes det verdiene for alle skalvariabler.

Hvis alternativene er gitt, setter det angitte alternativflaggene, eller rydder dem som beskrevet i seksjonen Sx Argument List Processing.

Den tredje bruken av den angitte kommandoen er å sette verdiene av skallets posisjonsparametere til angitte args. For å endre posisjonsparametrene uten å endre noen alternativer, bruk `` - '' som det første argumentet som skal settes. Hvis ingen args er til stede, vil den angitte kommandoen slette alle posisjonsparametrene (tilsvarende å utføre `` shift $ #. ''

variabel verdi

Tilordner verdi til variabel. (Generelt er det bedre å skrive variabel = verdi enn å brukesetVar setVarer ment å brukes i funksjoner som tilordner verdier til variabler hvis navn overføres som parametere.)

skifte n

Skift posisjonsparametrene n ganger. ENskifte setter verdien av $1 til verdien av $2 verdien av $2 til verdien av $3 og så videre, reduserer verdien av $# av en. Hvis n er større enn antall posisjonsparametere,skifte vil utstede en feilmelding, og avslutte med returstatus 2.

ganger

Skriv ut akkumulerte bruker- og systemtider for skallet og for prosesser som løper fra skallet. Returstatusen er 0.

felle handling signal…

Årsak at skallet skal analysere og utføre handling når noen av de angitte signalene mottas. Signalene er spesifisert av signalnummer. Hvis signal er0 handlingen utføres når skallet utgår. handling kan være null eller `` - '' førstnevnte forårsaker at det angitte signalet blir ignorert og sistnevnte forårsaker at standardinnretningen blir tatt. Når skallet gaffles av en subshell, tilbakestilles det fanget (men ikke ignorert) signaler til standardhandlingen. Defelle kommandoen har ingen effekt på signaler som ble ignorert ved oppføring til skallet.

type Navn …

Tolk hvert navn som en kommando og skriv ut oppløsningen til kommandosøk. Mulige oppløsninger er: shell søkeord, alias, shell builtin, kommando, sporet alias og ikke funnet. For aliaser blir aliasekspansjonen skrevet ut; for kommandoer og spore aliaser, skrives hele stedsnavnet til kommandoen ut.

ulimit-H-S -a -tfdscmlpn verdi

Forespør om eller angi de harde eller myke grensene på prosesser eller sett nye grenser.Valget mellom hard grense (som ingen prosess får lov til å krenke, og som ikke kan heves når den er senket) og myk grense (som fører til at prosessene signaliseres, men ikke nødvendigvis blir drept, og som kan heves) er laget med disse flaggene:

-H

sett eller spørre om harde grenser

-S

sett eller spørre om myke grenser. Hvis ikke -H eller -S er angitt, den myke grensen vises eller begge grensene er innstilt. Hvis begge er angitt, vinner den siste.

Grensen for å bli forhørt eller satt, er valgt ved å spesifisere noen av disse flaggene:

-en

vis alle gjeldende grenser

-t

vis eller sett grensen på CPU-tid (i sekunder)

-f

vis eller sett grensen på den største filen som kan opprettes (i 512 byte blokker)

-d

vis eller sett grensen på datasegmentets størrelse på en prosess (i kilobytes)

-s

vis eller sett grensen på stakkstørrelsen på en prosess (i kilobytes)

-c

vis eller sett grensen på den største kjernedumpstørrelsen som kan produseres (i 512 byte blokker)

-m

vis eller sett grensen på det totale fysiske minnet som kan brukes av en prosess (i kilobytes)

l

vis eller sett grensen for hvor mye minne en prosess kan låse med mlock (2) (i kilobytes)

-p

vis eller sett grensen for antall prosesser denne brukeren kan ha på en gang

-n

vis eller sett grensen på nummerfiler en prosess kan ha åpne samtidig

Hvis ingen av disse er angitt, er det grensen for filstørrelse som vises eller settes. Hvis verdien er spesifisert, er grensen satt til det nummeret; ellers vises gjeldende grense.

Grenser for en vilkårlig prosess kan vises eller settes ved hjelp av sysctl (8) verktøyet.

umask maske

Angi verdien av umask (se umask (2)) til angitt oktalverdi. Hvis argumentet utelates, skrives umaskverdien.

unalias-en Navn

Hvis Navn er angitt, skallet fjerner det aliaset. Hvis -en er spesifisert, alle alias blir fjernet.

unset Navn…

De angitte variablene og funksjonene er avstengt og ikke eksportert. Hvis et gitt navn tilsvarer både en variabel og en funksjon, er både variabelen og funksjonen avstilt.

vente jobb

Vent på den angitte jobben for å fullføre og returnere avslutningsstatusen til den siste prosessen i jobben. Hvis argumentet utelates, vent på at alle jobber skal fullføres, og returnere en utgangsstatus på null.

Kommandolinjearbeid

Nårsh blir brukt interaktivt fra en terminal, den nåværende kommandoen og kommandoboken (sefc i Sx Builtins) kan redigeres ved hjelp av vi-modus kommandolinje redigering. Denne modusen bruker kommandoer, beskrevet nedenfor, som ligner på en delmengde av de som er beskrevet på vi man-siden. Kommandoen `sett '- vi gjør det mulig å redigere vi-modus og plassere sh i vi-innstillingsmodus. Med vi-modus aktivert, kan sh byttes mellom innstillingsmodus og kommandomodus. Redaktøren er ikke beskrevet i sin helhet her, men vil være i et senere dokument. Det ligner vi: å skrive Aq ESC vil kaste deg inn i kommando VI kommandomodus. Slår Aq tilbake mens kommandomodus passerer linjen til skallet.

Bruke Mann kommando ( % Mann ) for å se hvordan en kommando brukes på din datamaskin.