NAVN
sh - kommandostolker (skal)
SYNOPSIS
sh -/ + ACefnuvxIimqsVEbc -o longname -ord mål …
BESKRIVELSE
Sh er standard kommandotolk for systemet. Den nuværende version afsh er ved at blive ændret for at være i overensstemmelse medPOSIX 1003.2 og 1003.2a specifikationer for skallen. Denne version har mange funktioner, som gør det til en vis udseende til Korn-skalen, men det er ikke en Korn-skalklon (se ksh (1)). Kun funktioner udpeget afPOSIX plus nogle få Berkeley extensions, bliver indarbejdet i denne shell. Vi forventerPOSIX overensstemmelse af tiden 4.4 BSD er udgivet. Denne man side er ikke beregnet til at være en vejledning eller en komplet beskrivelse af skallen.
Oversigt
Skallen er en kommando, der læser linjer fra enten en fil eller terminalen, fortolker dem og udfører generelt andre kommandoer. Det er det program, der kører, når en bruger logger ind på systemet (selvom en bruger kan vælge en anden skal med kommandoen chsh (1)). Skallen implementerer et sprog, der har flowkontrolkonstruktioner, en makro facilitet, der giver en række funktioner ud over datalagring sammen med indbygget historie og linjedigeringsfunktioner. Den indeholder mange funktioner til at understøtte interaktiv brug og har den fordel, at det tolkningssprog er fælles for både interaktiv og ikke-interaktiv brug (skalskripter). Det vil sige, kommandoer kan skrives direkte til den løbende skal eller kan sættes i en fil, og filen kan udføres direkte af skallen.
Indledningsbøn
Hvis ingen args er til stede, og hvis standardindgangen på skallen er forbundet til en terminal (eller hvis -jegflag er indstillet), og -c Mulighed er ikke til stede, skalen betragtes som en interaktiv skal. En interaktiv shell beder generelt om hver kommando og håndterer programmerings- og kommandofeil forskelligt (som beskrevet nedenfor). Ved første start undersøger skallen argument 0, og hvis det begynder med et dash `- ', betragtes skallen også som en login shell. Dette gøres normalt automatisk af systemet, når brugeren logger først ind. En login shell læser først kommandoer fra filerne / etc / profile og .profile, hvis de eksisterer. Hvis miljøvariablenENV er indstillet til adgang til en skal eller er angivet i .profilen af en login shell, læser skalen nu kommandoer fra filen navngivet iENVDerfor skal en bruger placere kommandoer, der kun skal udføres ved login tid i .profilen, og kommandoer, der udføres for hver skal inde iENV fil. For at indstilleENV variabel til nogle filer, skal du placere følgende linje i din .profil i dit hjemmekatalog
ENV = $ HOME / .shinit; eksport ENV
erstatter `` .shinit '' ethvert filnavn du ønsker. SidenENV filen læses for hver indkaldelse af skallen, herunder shell scripts og ikke-interaktive skaller, er følgende paradigme nyttigt til at begrænse kommandoer iENV fil til interaktive invokationer. Placer kommandoer i `` sag '' og `` esac '' nedenfor (disse kommandoer beskrives senere):
sag $ - i * i *)
# kommandoer til brug kun til interaktive formål
…
ESAC
Hvis kommandolinjeparametre udover valgmulighederne er angivet, behandler skalen det første argument som navnet på en fil, hvorfra man skal læse kommandoer (et skalskript), og de resterende argumenter indstilles som shellens parametre ($ 1 , $ 2, osv.). Ellers læser skallen kommandoer fra standardindgangen.
Argument List Processing
Alle enkeltbogstavsoptionerne har et tilsvarende navn, der kan bruges som argument til -o mulighed. Sættet -o Navnet findes ved siden af enkeltbogsoptionen i nedenstående beskrivelse. Angivelse af et punktum `` - '' aktiverer indstillingen, mens du bruger et plus `` + '' deaktiverer indstillingen. Følgende indstillinger kan indstilles fra kommandolinjen eller med indstillingen (1) indbygget (beskrevet senere).
-en allexport
Eksporter alle variabler tildelt. (UNIMPLEMENTED for 4.4alpha)
-c
Læs kommandoer fra kommandolinjen. Ingen kommandoer vil blive læst fra standardindgangen.
-C noclobber
Overskriv ikke eksisterende filer med ``> '' (UNIMPLEMENTED for 4.4alpha)
-e errexit
Hvis ikke, interaktiv, skal du straks afslutte hvis en ikke-testet kommando fejler. Udgangsstatus for en kommando anses for at være eksplicit testet, hvis kommandoen bruges til at styre enhvis elifwhile ellerså længe eller hvis kommandoen er den venstre hånd operand af en `` && '' eller `` || '' operatør.
-f noglob
Deaktiver ekspansion af stienavn.
-n noexec
Hvis ikke, interaktiv, læs kommandoer, men udfør dem ikke. Dette er nyttigt for at kontrollere syntaxen af shell scripts.
-u nounset
Skriv en besked til standardfejl, når du forsøger at udvide en variabel, der ikke er indstillet, og hvis skalen ikke er interaktiv, skal du afslutte med det samme. (UNIMPLEMENTED for 4.4alpha)
-v ordrig
Skallen skriver sin indgang til standardfejl, som den læses. Nyttig til fejlfinding.
-x xtrace
Skriv hver kommando til standardfejl (forud for en `+ ', før den udføres. Nyttig til debugging.
-q quietprofile
Hvis -v eller -x valgmuligheder er blevet indstillet, skal du ikke anvende dem, når du læser initialiseringsfiler, idet disse er / etc / profile .profile og filen specificeret afENV miljøvariabel.
-JEG ignoreeof
Ignorer EOFs fra input når interaktive.
-jeg interaktiv
Tving skalen til at opføre sig interaktivt.
-m overvåge
Tænd jobkontrol (indstilles automatisk, når det er interaktivt).
-s stdin
Læs kommandoer fra standardindgang (indstilles automatisk, hvis der ikke findes filargumenter). Denne indstilling har ingen virkning, når den er indstillet, efter at skalen allerede er begyndt at køre (dvs. med sæt (1)).
-V we
Aktivér den indbyggede vi (1) kommandolinjeditor (deaktiverer -E hvis den er indstillet).
-E emacs
Aktivér den indbyggede emacs (1) kommandolinjeditor (deaktiverer -V hvis den er indstillet).
-b underrette
Aktivér asynkron anmeldelse af baggrundsopgaver. (UNIMPLEMENTED for 4.4alpha)
Lexical Structure
Skallen læser input i form af linjer fra en fil og bryder den op i ord i hvide rum (emner og faner), og ved bestemte sekvenser af tegn, der er specielle for skallen kaldet `` operatører '' Der er to typer operatører: kontroloperatører og omdirigeringsoperatører (deres betydning diskuteres senere). Følgende er en liste over operatører:
"Kontroloperatører:"
& && ( ) ; ;; | || "Omdirigeringsoperatør:" < > >| << >> <& >& <<- <>
Citering bruges til at fjerne den særlige betydning af visse tegn eller ord til skallen, såsom operatører, mellemrum eller søgeord. Der er tre typer citerer: matchede single citater, matchede dobbelte citater og backslash. En backslash bevarer den bogstavelige betydning af følgende tegn, med undtagelse af Aq newline. En backslash forud for en Aq newline behandles som en line fortsættelse. Vedhæftende tegn i enkelte citater bevarer den bogstavelige betydning af alle tegnene (undtagen enkelt citater, hvilket gør det umuligt at sætte enkelt citater i en enkeltnoteret streng). Vedhæftende tegn inden for dobbelte citater bevarer den bogstavelige betydning af alle tegn undtagen dollarsignal ($) backquote (`) og backslash () Baggrunden inden for dobbelt citater er historisk underlig og tjener til kun at citere følgende tegn: $ ` Ellers forbliver det bogstaveligt. Reserverede ord er ord, der har særlig betydning for skallen og er anerkendt i starten af en linje og efter en kontroloperatør. Følgende er reserverede ord: ! TaElif Ta fi Ta mens Ta sagen ellers Tafor Ta så Ta {Ta} gør Tafærdig Ta indtil Ta hvis Ta esac Deres betydning diskuteres senere. Et alias er et navn og en tilsvarende værdi indstillet ved hjælp af kommandoen alias (1). Når et forbeholdt ord kan forekomme (se ovenfor), og efter kontrol af reserverede ord kontrollerer skallen ordet for at se, om det matcher et alias. Hvis det gør det, erstatter det det i input-strømmen med dets værdi. For eksempel, hvis der er et alias kaldet `` lf '' med værdien `` ls -F '' så indtastes: lf foobar ville blive ls -F foobar Aliaser giver en bekvem måde, hvorpå naive brugere kan oprette stenografi for kommandoer uden at skulle lære at skabe funktioner med argumenter. De kan også bruges til at oprette leksisk uklare kode. Denne brug er afskrækket. Skallen fortolker de ord, den læser i henhold til et sprog, hvis specifikation er uden for denne sides side (se BNF iPOSIX 1003.2 dokument). I det væsentlige er en linje læst, og hvis det første ord i linjen (eller efter en kontroloperatør) ikke er et reserveret ord, har skallen genkendt en simpel kommando. Ellers kan en kompleks kommando eller en anden speciel konstruktion være blevet anerkendt. Hvis en enkel kommando er blevet genkendt, udfører skalen følgende handlinger: Ledende ord i formularen `` navn = værdi '' fjernes og tildeles miljøet i den enkle kommando. Omdirigeringsoperatører og deres argumenter (som beskrevet nedenfor) fjernes og gemmes til behandling. De resterende ord udvides som beskrevet i afsnittet `` Udvidelser '', og det første resterende ord betragtes som kommandoenavnet, og kommandoen er placeret. De resterende ord betragtes som kommandoerens argumenter. Hvis intet kommandonavn resulterede, påvirker variabelopgaverne `` name = value '', der er anerkendt i punkt 1, den aktuelle shell. Omdirigeringer udføres som beskrevet i næste afsnit. Omadressering Omdirigeringer bruges til at ændre, hvor en kommando læser indgangen eller sender dens output. Generelt omdirigeringer åbner, lukker eller duplikerer en eksisterende reference til en fil. Det overordnede format, der bruges til omdirigering, er: n redir-op-fil hvor redir-op er en af omdirigeringsoperatørerne nævnt tidligere. Følgende er en liste over de mulige omdirigeringer. Bq n er et valgfrit tal, som i `3 '(ikke` Bq 3', der refererer til en filbeskrivelse. n> fil Omdirigere standard output (eller n) til fil. n> | fil Samme, men tilsidesætte -C mulighed. n >> fil Tilføj standard output (eller n) til fil. n <fil Omdirigér standardindgang (eller n) fra fil. n1 <& n2 Duplikér standardindgang (eller n1) fra filbeskrivelse n2. n <& - Luk standardindgang (eller n). n1> & n2 Duplikér standard output (eller n1) fra n2. n> og - Luk standard output (eller n). n <> fil Åbn fil til læsning og skrivning på standardindgang (eller n). Følgende omdirigering kaldes ofte et `` her-dokument '' n << delimiter her-doc-tekst … afgrænser Al teksten på successive linjer op til afgrænsningen gemmes væk og stilles til rådighed for kommandoen på standardindgang eller filbeskrivelse n, hvis den er angivet.Hvis afgrænsningen som angivet på startlinjen er citeret, behandles here-doc-teksten bogstaveligt, ellers bliver teksten udsat for parameterudvidelse, kommandosubstitution og aritmetisk ekspansion (som beskrevet i afsnittet om `` Udvidelser ') 'Hvis operatøren er `` << -' 'i stedet for `` <<' ', fjernes førende faner i here-doc-teksten. Der er tre typer kommandoer: skalfunktioner, indbyggede kommandoer og normale programmer - og kommandoen søges efter (ved navn) i den rækkefølge. De udføres hver for sig på en anden måde. Når en shell-funktion udføres, er alle shell-positionsparametrene (bortset fra $ 0, som forbliver uændrede) sat til argumentet for skalfunktionen. Variablerne, der udtrykkeligt placeres i kommandos omgivelser (ved at placere opgaver til dem før funktionsnavnet) gøres lokalt til funktionen og er indstillet til de givne værdier. Derefter udføres kommandoen i funktionsdefinitionen. Positionsparametrene gendannes til deres oprindelige værdier, når kommandoen fuldendes. Alt dette sker inden for den nuværende shell. Shell builtins udføres internt til skallen uden at gyde en ny proces. Ellers, hvis kommandoenavnet ikke matcher en funktion eller indbygget, søges kommandoen som et normalt program i filsystemet (som beskrevet i næste afsnit). Når et normalt program udføres, kører skalen programmet, der overfører argumenterne og miljøet til programmet. Hvis programmet ikke er en normal eksekverbar fil (dvs. hvis den ikke begynder med det "magiske nummer" hvisASCII repræsentation er "#!", så execve (2) returnerer Er ENOEXEC da) skal skalen fortolke programmet i en subshell. Barneskallen genaktiverer sig selv i dette tilfælde, så effekten bliver som om en ny skal er blevet påkaldt til at håndtere ad hoc shell scriptet, bortset fra at placeringen af hashed-kommandoer placeret i moderskallen vil blive husket af barn. Bemærk, at tidligere versioner af dette dokument og kildekoden i sig selv vildledende og sporadisk henviser til et shell script uden et magisk nummer som en "shell procedure". Når man finder en kommando, ser skalen først ud for at se, om den har en skalfunktion med det navn. Så det ser ud til en indbygget kommando med det navn. Hvis en indbygget kommando ikke findes, sker en af to ting: Kommando navne, der indeholder et skråstreg, udføres simpelthen uden at foretage nogen søgninger. Skallen søger efter hver indgangSTI til gengæld for kommandoen. Værdien afSTIvariabel skal være en serie af poster adskilt af kolonner. Hver post består af et katalognavn. Den aktuelle mappe kan angives implicit ved et tomt katalognavn eller eksplicit af en enkelt periode. Command Exit Status Hver kommando har en exitstatus, der kan påvirke opførslen af andre shell kommandoer. Paradigmet er, at en kommando udgår med nul for normal eller succes, og ikke-nul for fejl, fejl eller en falsk indikation. Mandsiden for hver kommando skal angive de forskellige exitkoder og hvad de betyder. Desuden returnerer de indbyggede kommandoer exitkoder, ligesom en udført shell-funktion. Komplekse kommandoer er kombinationer af enkle kommandoer med kontroloperatører eller reserverede ord, sammen skaber en større kompleks kommando. Mere generelt er en kommando et af følgende: Medmindre andet er angivet, er udgangsstatus for en kommando den for den sidste enkle kommando, der udføres af kommandoen. En pipeline er en sekvens af en eller flere kommandoer, der er adskilt af kontroloperatøren |. Standard output af alle, men den sidste kommando, er forbundet til standardindgangen for den næste kommando. Standardudgangen fra den sidste kommando er arvet fra skallen som sædvanlig. Formatet for en rørledning er: ! command1 | command2 … Standardudgangen fra kommando1 er forbundet til standardindgangen af kommandoen2. Standardindgangen, standardudgangen eller begge kommandoer anses for at være tildelt af rørledningen, inden der omdirigeres, der er angivet af omdirigeringsoperatører, der er en del af kommandoen. Hvis rørledningen ikke er i baggrunden (diskuteres senere), venter skallen på, at alle kommandoer skal udfyldes. Hvis det reserverede ord! går ikke ud for rørledningen, udgangsstatus er exitstatus for den sidste kommando, der er angivet i rørledningen. Ellers er exitstatus den logiske IKKE af exitstatus for den sidste kommando. Det vil sige, hvis den sidste kommando returnerer nul, er exitstatus 1; hvis den sidste kommando returnerer større end nul, er exitstatus nul. Fordi pipeline-tildeling af standardindgang eller standardudgang eller begge foregår før omdirigering, kan den ændres ved omdirigering. For eksempel: $ command1 2> & 1 | Command2 sender både standard output og standard fejl af kommandoen1 til standardindgangen af command2. A; eller Bemærk, at i modsætning til nogle andre skaller er hver proces i rørledningen et barn af den påkaldende skal (medmindre det er en shell indbygget, i hvilket tilfælde den udføres i den nuværende skal - men enhver virkning det har på miljøet bliver udslettet). Hvis en kommando afsluttes af kontroloperatøren ampersand (&), udfører skallen kommandoen asynkront - det vil sige, at skalen ikke venter på, at kommandoen skal afslutte, før den næste kommando udføres. Formatet til at køre en kommando i baggrunden er: command1 & command2 & … Hvis skalen ikke er interaktiv, er standardindgangen af en asynkron kommando sat til / dev / null En liste er en sekvens af nul eller flere kommandoer adskilt af newlines, semicolons eller ampersands, og eventuelt opsiges af et af disse tre tegn. Kommandoerne i en liste udføres i den rækkefølge, de er skrevet. Hvis kommandoen efterfølges af en ampersand, starter skallen kommandoen og går straks videre til næste kommando; ellers venter den på, at kommandoen skal opsige, inden du går videre til den næste. `` && '' og `` || '' er AND-OR listoperatører. `` && '' udfører den første kommando, og udfører derefter den anden kommando iff udgangsstatus for den første kommando er nul. `` || '' er ens, men udfører den anden kommando iff udgangsstatus for den første kommando er ikke-null. `` && '' og `` || '' begge har samme prioritet. Synkroniseringen af kommandoen if er hvis liste derefter liste elif liste derefter liste … andet liste fi Syntaksen af den kommando, der ligger under kommandoen, er mens listen gøre listen Færdig De to lister udføres gentagne gange, mens exitstatusen for den første liste er nul. Indtil kommandoen er ens, men har ordet indtil i stedet for, hvilket får det til at gentages, indtil exitstatusen for den første liste er nul. Syntaks for kommandoen er for variabel i ord … gøre listen Færdig Ordene udvides, og derefter udføres listen gentagne gange med variablen indstillet til hvert ord til gengæld. gør og gjort kan erstattes med `` {'' og ``} '' Syntaks af pause og fortsæt kommando er pause num fortsæt num Afbrydelse afbryder nummerets indre for eller mens sløjfer. Fortsæt fortsætter med den næste iteration af den inderste sløjfe. Disse implementeres som indbyggede kommandoer. Synkroniseringen af sagen kommandoen er sag ord i mønster) liste ;; … ESAC Mønstret kan faktisk være et eller flere mønstre (se Shell Patterns beskrevet senere), adskilt af `` '' tegn. Kommandoer kan grupperes ved enten at skrive (liste) eller {list; Den første af disse udfører kommandoerne i en underskala. Indbyggede kommandoer grupperet i en (liste) påvirker ikke den aktuelle shell. Den anden form gaffel ikke en anden skal, så det er lidt mere effektivt. Gruppering af kommandoer sammen på denne måde giver dig mulighed for at omdirigere deres output som om de var et program: {printf hallo; printf world n ";}> hilsen Funktioner Syntaksen for en funktionsdefinition er navn () kommando En funktionsdefinition er en eksekverbar erklæring; når den udføres installerer den en funktion med navnet og returnerer en exitstatus på nul. Kommandoen er normalt en liste indesluttet mellem `` {'' og ``} '' Variabler kan angives at være lokale for en funktion ved hjælp af en lokal kommando. Dette skal vises som den første sætning af en funktion, og syntaksen er lokal variabel | - … Lokal implementeres som en indbygget kommando. Når en variabel er lavet lokal, arver den den oprindelige værdi og eksporteres og læses fladt fra variablen med samme navn i det omgivende omfang, hvis der er en. Ellers er variablen oprindeligt frakoblet. Skallen bruger dynamisk scoping, så hvis du gør variablen x lokalt til funktion f, som derefter kalder funktion g, vil henvisninger til variablen x lavet inde i g referere til variablen x deklareret inde f, ikke til den globale variabel navngivet x . Den eneste specielle parameter, der kan foretages lokalt, er `` - '' Gør `` - '' lokale eventuelle shell-indstillinger, som ændres via den indstillede kommando inde i funktionen, der skal gendannes til deres oprindelige værdier, når funktionen vender tilbage. Synkroniseringen af returkommandoen er returnere exitstatus Det afslutter den aktuelt udførte funktion. Retur er implementeret som en indbygget kommando. Skallen opretholder et sæt parametre. En parameter betegnet med et navn kaldes en variabel. Når du starter, skifter skallen alle miljøvariablerne ind i shellvariabler. Nye variabler kan indstilles ved hjælp af formularen navn = værdi Variabler indstillet af brugeren skal have et navn, der udelukkende består af alfabetiske, numeriske og understreger - den første må ikke være numerisk. En parameter kan også betegnes med et tal eller et specialtegn som forklaret nedenfor. En positionsparameter er en parameter betegnet med et tal (n> 0). Skallen sætter disse indledningsvis til værdierne af dens kommandolinjeparametre, der følger navnet på shell scriptet. Sættet (1), der er indbygget, kan også bruges til at indstille eller nulstille dem. En særlig parameter er en parameter betegnet med et af følgende specialtegn. Værdien af parameteren er angivet ved siden af dens tegn. * Udvider til de positionelle parametre, startende fra en. Når ekspansionen sker inden for en dobbeltciteret streng, udvides den til et enkelt felt med værdien af hver parameter adskilt af den første tegn afIFS variabel eller ved a @ Udvider til de positionelle parametre, startende fra en.Når ekspansion sker inden for dobbelt citater, udvides hver positionsparameter som et separat argument. Hvis der ikke er nogen positionelle parametre, genererer udvidelsen af @ ingen nulargumenter, selv når @ er dobbeltnoteret. Hvad det egentlig betyder, er, at hvis $ 1 er `` abc '' og $ 2 er `` def ghi '', så udvider Qq $ @ til de to argumenter: abc def ghi # Udvider til antallet af positionsparametre. ? Udvider til udgangsstatus for den seneste pipeline. - (bindestreg) Udvider til de nuværende indstillingsflag (de enkelte bogstaverne navne sammenkædet i en streng) som angivet ved påkaldelse, ved den indbyggede indbyggede kommando eller implicit af skalen. $ Udvider til proces ID for den påkaldte skal. En subshell bevarer den samme værdi på $ som sin forælder. ! Udvider til proces ID for den seneste baggrundskommando udført fra den aktuelle shell. For en rørledning er proces ID den for den sidste kommando i rørledningen. 0 (Zero.) Udvider til navnet på shell eller shell script. Ordudvidelser Denne bestemmelse beskriver de forskellige udvidelser, der udføres på ord. Ikke alle udvidelser udføres på hvert ord, som forklaret senere. Tilde-udvidelser, parameterudvidelser, kommandosubstitutioner, aritmetiske udvidelser og quote-flytninger, der forekommer inden for et enkelt ord, udvides til et enkelt felt. Det er kun feltdeling eller udvidelse af stienavne, der kan oprette flere felter fra et enkelt ord. Den eneste undtagelse til denne regel er udvidelsen af den særlige parameter @ inden for dobbelt citater, som beskrevet ovenfor. Ordreudvidelsen er: Tilde Udvidelse, Parameterudvidelse, Kommandosubstitution, Aritmetisk Udvidelse (disse forekommer samtidig). Field Splitting udføres på felter, der genereres af trin (1), medmindreIFS variabel er null. Pathname Expansion (medmindre sæt -f er i kraft). Citatfjernelse. $ Tegn bruges til at indføre parameterudvidelse, kommandosubstitution eller aritmetisk evaluering. Et ord, der begynder med et ubestemt tegne tegn (~), udsættes for tilde ekspansion. Alle tegnene op til et skråstreg (/) eller enden af ordet behandles som et brugernavn og erstattes af brugerens hjemmemappe. Hvis brugernavnet mangler (som i ~ / foobar) erstattes tilde med værdien af HJEM variabel (den aktuelle brugers hjemmekatalog). Formatet for parameterudvidelse er som følger: $ {Ekspression} hvor udtrykket består af alle tegn indtil den matchende ``} '' Enhver ``} '', der undslippes af et tilbageslag eller i en citeret streng, og tegn i indlejrede aritmetiske udvidelser, kommandosubstitutioner og variable udvidelser ikke undersøges ved bestemmelse af matchende ``} '' Den enkleste form for parameterudvidelse er: $ {Parameter} Værdien, hvis nogen, af parameter er erstattet. Parameternavnet eller symbolet kan lukkes i armbøjler, som er valgfrie bortset fra positionsparametre med mere end et ciffer, eller når parameter efterfølges af et tegn, som kan tolkes som en del af navnet. Hvis en parameterudvidelse forekommer inde i dobbelt citater: Pathname ekspansion udføres ikke på resultaterne af udvidelsen. Feltfordeling udføres ikke på resultaterne af udvidelsen med undtagelse af @. Derudover kan en parameterudvidelse ændres ved at bruge et af følgende formater. $ {Parameter: -word} Brug standardværdier. Hvis parameteren er frakoblet eller null, er udvidelsen af ord erstattet; ellers er værdien af parameter erstattet. $ {Parameter: = ord} Tildel standardværdier. Hvis parameteren er frakoblet eller null, er udvidelsen af ord tildelt til parameter. I alle tilfælde erstattes den endelige værdi af parameteren. Kun variabler, ikke positionelle parametre eller særlige parametre, kan tildeles på denne måde. $ {Parameter:? Word} Angiv fejl, hvis Null eller Unset. Hvis parameteren er frakoblet eller null, er ekspansionen af ord (eller en besked, der angiver, at den er frakoblet, hvis et ord udelades) skrevet til standardfejl, og skalen udløber med en ikke-null exit status. Ellers er værdien af parameter erstattet. En interaktiv skal behøver ikke at gå ud. $ {Parameter: + ord} Brug alternativ værdi. Hvis parameteren er frakoblet eller null, er null erstattet; ellers er udvidelsen af ordet erstattet. I de tidligere viste parameterudvidelser resulterer brugen af tyktarmen i formatet i en test for en parameter, der er frakoblet eller null. udeladelse af tyktarmen resulterer i en test for en parameter, der kun er afbrudt. $ {# Parameter} Strenglængde. Længden i tegn af værdien af parameteren. De følgende fire varianter af parameterudvidelse giver mulighed for substringbehandling. I hvert tilfælde bruges mønster matching notation (se Shell Patterns), i stedet for almindelig udtryk notation, til at evaluere mønstrene. Hvis parameteren er * eller @, er resultatet af udvidelsen uspecificeret. Ved at lukke hele parameterudvidelsestrengen i dobbeltkvoter forårsager det ikke, at følgende fire varianter af mønsterfigurer er citeret, mens citerende tegn i bøjlerne har denne virkning. $ {Parameter% ord} Fjern det mindste suffix-mønster. Ordet udvides til at producere et mønster. Parameterudvidelsen resulterer så i parameter, med den mindste del af suffikset matchet af mønsteret slettet. $ {Parameter %% ord} Fjern største suffix mønster.Ordet udvides til at producere et mønster. Parameterudvidelsen resulterer så i parameter, med den største del af suffikset matchet af mønsteret slettet. $ {Parameter # ord} Fjern det mindste præfiks mønster. Ordet udvides til at producere et mønster. Parameterudvidelsen resulterer så i parameter, hvor den mindste del af præfikset er matchet med mønsteret slettet. $ {Parameter ## ord} Fjern største præfiks mønster. Ordet udvides til at producere et mønster. Parameterudvidelsen resulterer så i parameter, med den største del af præfikset, der matches med mønsteret slettet. Kommandosubstitution Kommandosubstitution gør det muligt at erstatte udgangen af en kommando i stedet for selve kommandoenavnet. Kommandosubstitution finder sted, når kommandoen er vedlagt som følger: $ (Kommando) eller Po `` backquoted''version Pc: `command` Skallen udvider kommandosubstitutionen ved at udføre kommandoen i et subshell-miljø og erstatte kommandosubstitutionen med standardudgangen af kommandoen, fjerne sekvenser af en eller flere Aritmetisk ekspansion tilvejebringer en mekanisme til evaluering af et aritmetisk udtryk og erstatning af dets værdi. Formatet for aritmetisk ekspansion er som følger: $ ((Udtryk)) Udtrykket behandles som om det var i dobbelt citater, bortset fra at et dobbelt citat inde i udtrykket ikke behandles specielt. Skallen udvider alle tokens i udtrykket for parameterudvidelse, kommandosubstitution og quote-fjernelse. Derefter behandler skallen dette som et aritmetisk udtryk og erstatter værdien af udtrykket. Efter parameterudvidelse, kommandosubstitution og aritmetisk ekspansion scanner skalen resultaterne af udvidelser og substitutioner, der ikke forekom i dobbelt citater for feltopdeling, og der kan opstå flere felter. Skallen behandler hver karakter afIFS som afgrænser og brug afgrænserne til at opdele resultaterne af parameterudvidelse og kommandosubstitution i felter. Medmindre -f flag er indstillet, genereres filnavn, når orddeling er afsluttet. Hvert ord ses som en række mønstre, adskilt af skråstreger. Ekspansionsprocessen erstatter ordet med navnene på alle eksisterende filer, hvis navne kan dannes ved at erstatte hvert mønster med en streng, som svarer til det angivne mønster. Der er to begrænsninger på dette: For det første kan et mønster ikke matche en streng, der indeholder et skråstreg, og for det andet kan et mønster ikke matche en streng, der begynder med en periode, medmindre mønstrets første tegn er en periode. I næste afsnit beskrives de mønstre, der bruges til både udvidelse af stienavnet og sagen (1). Et mønster består af normale tegn, som matcher sig selv og meta-tegn. Meta-tegnene er ``! '' `` * '' ``? '' Og `` '' Disse tegn mister deres særlige betydninger, hvis de er citeret. Når kommando- eller variabel substitution udføres, og dollartegn eller -udnoteringer ikke er dobbeltnoteret, scannes værdien af variablen eller kommandoen fra kommandoen for disse tegn, og de ændres til metategn. En stjerne (`` * '') matcher enhver streng af tegn. Et spørgsmålstegn passer til et enkelt tegn. En venstrebøjle (`` '') introducerer en tegnklasse. Afslutningen på tegnet klassen er angivet med et (`` ''), hvis `` 'mangler, så svarer `` ' 'til et `` ' 'snarere end at indføre en tegnklasse. En tegnklasse matcher et af tegnene mellem de firkantede parenteser. En række tegn kan angives ved hjælp af et minustegn. Karakterklassen kan suppleres ved at lave et udråbstegn for karakterklassens første karakter. For at inkludere et `` '' i en tegningsklasse skal du gøre det til det første tegn angivet (efter '`!' 'Hvis det er tilfældet). For at inkludere et minustegn skal du gøre det til det første eller sidste tegn angivet Dette afsnit viser de indbyggede kommandoer, som er bygget op, fordi de skal udføre en operation, der ikke kan udføres af en separat proces. Ud over disse er der flere andre kommandoer, der kan bygges for effektivitet (for eksempel ekko 1). : En null-kommando, der returnerer en 0 (true) exitværdi. . fil Kommandoerne i den angivne fil læses og udføres af skalen. alias navn = streng … Hvis name = snor er angivet, shell definerer aliaset navn med værdi snor Hvis bare navn er angivet, værdien af aliaset navn er trykt. Uden argumenteralias builtin udskriver navnene og værdierne for alle definerede aliaser (seunalias) bg job … Fortsæt de specificerede job (eller det aktuelle job, hvis der ikke er stillet job) i baggrunden. kommando kommando arg … Udfør den angivne indbyggede kommando. (Dette er nyttigt, når du har en shell-funktion med samme navn som en indbygget kommando.) cd vejviser Skift til den angivne mappe (standard$ HOME) Hvis en post forCDPATH vises i miljøet afcd kommando eller shell-variablenCDPATH er indstillet, og katalognavnet begynder ikke med et skråstreg, så de mapper, der er angivet iCDPATH vil blive søgt efter den angivne mappe. Formatet afCDPATH er det samme som forSTI I en interaktiv skal, dencd kommandoen udskriver navnet på den mappe, den faktisk skifter til, hvis dette er forskelligt fra det navn, som brugeren gav. Disse kan være forskellige, enten fordiCDPATH mekanisme blev brugt, eller fordi et symbolsk link blev krydset. eval snor… Sammenkæd alle argumenterne med mellemrum. Derefter gentag og udfør kommandoen. exec kommando arg … Medmindre kommandoen udelades, erstattes shellprocessen med det angivne program (hvilket skal være et ægte program, ikke en shell indbygget eller funktion). Eventuelle omdirigeringer påexeckommando er markeret som permanent, så de ikke fortrydes, nårexec kommandoen er færdig. Afslut exitstatus Afslut shell processen. Hvis exitstatus er givet det bruges som udgangsstatus for skallen; Ellers bruges udgangsstatus for den foregående kommando. eksport navn… eksport -p De angivne navne eksporteres, så de vises i miljøet af efterfølgende kommandoer. Den eneste mulighed for at eksportere en variabel er at afkoble den. Skallen tillader værdien af en variabel at blive indstillet samtidig med, at den eksporteres ved at skrive eksportnavn = værdi Uden argumenter lister eksportkommandoen på navnene på alle eksporterede variabler. Med -pValgmuligheden specificeret, output vil blive formateret hensigtsmæssigt til ikke-interaktiv brug. fc-e redaktør først sidst fc-l -nr først sidst fc-s gammelt = ny først Detfc indbyggede lister, eller redigeringer og genudføres, kommandoer, der tidligere er indtastet i en interaktiv shell. -e redaktør Brug redaktøren opkaldt af editor til at redigere kommandoerne. Redigeringsstrengen er et kommandonavn, der er genstand for søgning viaSTI variabel. Værdien iFCEDIT variabel bruges som standard når -e er ikke angivet. HvisFCEDIT er null eller frakoblet, værdien afEDITOR variabel bruges. HvisEDITOR er null eller frakoblet, ed (1) bruges som editor. -l (ell) Skriv kommandoerne frem for at påberåbe sig en editor på dem. Kommandoerne er skrevet i den rækkefølge, der er angivet af de første og sidste operander, som påvirket af -r med hver kommando forud for kommandoenummeret. -n Undertryk kommandonumre, når du noterer med -l. -r Omvendt rækkefølgen af de kommandoer, der er angivet (med -l eller redigeret (med hverken -l heller ikke -s) -s Genudfør kommandoen uden at påberåbe sig en editor. først sidst Vælg kommandoerne for at liste eller redigere. Antallet af tidligere kommandoer, der kan nås, bestemmes af værdien afHISTSIZE variabel. Værdien af første eller sidste eller begge er en af følgende: + Nummer Et positivt tal, der repræsenterer et kommandonummer; kommandonumre kan vises med -l mulighed. -nummer Et negativt decimaltal repræsenterer den kommando, der blev udført antal kommandoer tidligere. For eksempel er -1 den umiddelbart foregående kommando. snor En streng, der angiver den senest indtastede kommando, der begynder med den pågældende streng. Hvis den gamle = nye operand ikke er angivet med -s strengformen af den første operand kan ikke indeholde et indlejret ensartet tegn. Følgende miljøvariabler påvirker udførelsen af fc: FCEDIT Navn på redaktøren at bruge. HISTSIZE Antallet af tidligere kommandoer, der er tilgængelige. fg job Flyt det specificerede job eller det aktuelle job til forgrunden. getopts optstring var DetPOSIX getopts kommando, ikke forveksles med Bell Labs -afledt getopt (1). Det første argument skal være en række bogstaver, som hver især eventuelt kan efterfølges af et kolon for at angive, at indstillingen kræver et argument. Den angivne variabel er indstillet til den analyserede indstilling. Detgetopts kommandoen udskriver det ældre getopt (1) hjælpeprogram på grund af dets håndtering af argumenter, der indeholder hvide rum. Detgetopts builtin kan bruges til at få valgmuligheder og deres argumenter fra en liste over parametre. Når påkaldt,getopts placerer værdien af den næste mulighed fra valgstrengen i listen i shell-variablen specificeret af Var og det er indekset i shell-variablenOPTIND Når skallen påberåbes,OPTIND initialiseres til 1. For hver indstilling, der kræver et argument, skalgetopts builtin vil placere det i shell-variablenOPTARG Hvis der ikke er mulighed for en indstilling i optstring derefterOPTARG vil blive afbrudt. optstring er en række anerkendte optionsbreve. Hvis et brev efterfølges af et kolon, forventes muligheden for at have et argument, der måske er adskilt fra det med hvidt mellemrum. Hvis et valgtegn ikke findes, hvor forventet,getopts vil indstille variablen Var til en ``? ''getopts vil så blive afbrudtOPTARG og skriv output til standardfejl. Ved at angive et kolon som første tegn på optstring alle fejl vil blive ignoreret. En nonzero-værdi returneres, når den sidste mulighed er nået. Hvis der ikke er resterende argumenter,getopts vil sætte Var til den særlige mulighed, `` - '' ellers vil den indstille Var til ``? '' Følgende kodefragment viser, hvordan man kan behandle argumenterne for en kommando, der kan tage valgmulighederne a og b og indstillingen c, der kræver et argument. mens getopts abc: fgøresag $ f ia | b) flag = $ f ;;c) carg = $ OPTARG ;;?) echo $ USAGE; exit 1 ;;ESACFærdigskift `expr $ OPTIND - 1` Denne kode accepterer et af følgende som tilsvarende: cmd -acarg filfilcmd-a-c arg filcmd -carg -a filfilcmd -a -carg - filfil hash-rv kommando… Skallen opretholder et hashbord, som husker placeringen af kommandoer. Med ingen argumenter overhovedethash kommando udskriver indholdet af denne tabel. Indlæg, som ikke er set siden sidstecd kommandoen er markeret med en stjerne; Det er muligt for disse poster at være ugyldige. Med argumenterhash kommandoen fjerner de angivne kommandoer fra hashbordet (medmindre de er funktioner) og derefter lokaliserer dem. Med -v option, hash udskriver placeringen af kommandoerne, som den finder dem. Det -r mulighed får hash-kommandoen til at slette alle indtastningerne i hash-tabellen undtagen for funktioner. jobid job Udskriv proces-id'erne af processerne i jobbet. Hvis job Argumentet udelades, det aktuelle job bruges. job Denne kommando viser alle de baggrundsprocesser, der er børn i den nuværende shell-proces. pwd Udskriv den aktuelle mappe. Den indbyggede kommando kan afvige fra programmet med det samme navn, fordi den indbyggede kommando husker, hvad den nuværende mappe er, snarere end at gencomputere den hver gang. Dette gør det hurtigere. Men hvis den nuværende mappe omdøbes, er den indbyggede version afpwd vil fortsætte med at udskrive det gamle navn til mappen. Læs-p hurtig -r variabel … Prompten bliver udskrevet, hvis -p indstillingen er angivet, og standardindgangen er en terminal. Så læses en linje fra standardindgangen. Den efterfølgende nye linje slettes fra linjen, og linjen er opdelt som beskrevet i afsnittet om ordopdeling ovenfor, og stykkerne tildeles variablerne i rækkefølge. Mindst en variabel skal angives. Hvis der er flere stykker end variabler, de resterende stykker (sammen med tegnene iIFS der adskilt dem) er tildelt den sidste variabel. Hvis der er flere variabler end stykker, tildeles de resterende variabler nullstrengen. DetLæs builtin vil indikere succes, medmindre EOF er stødt på input, i hvilket tilfælde fejl er returneret. Som standard, medmindre -r indstillingen er angivet, fungerer backslash'''''''en som et escape-tegn, hvilket forårsager, at følgende tegn behandles bogstaveligt. Hvis en backslash efterfølges af en ny linje, slettes backslash og newline. Læs kun navn… readonly -p De angivne navne er markeret som skrivebeskyttet, så de ikke senere kan ændres eller frakobles. Skallen tillader værdien af en variabel at blive indstillet samtidig med, at den er markeret læst ved skrivning readonly name = værdi Uden argumenter lister den lette kommando navne på alle skrivebeskyttede variabler. Med -p Valgmuligheden specificeret, output vil blive formateret hensigtsmæssigt til ikke-interaktiv brug. sæt { -muligheder | + muligheder | - arg … Detsæt kommandoen udfører tre forskellige funktioner. Uden argumenter lister det værdierne for alle shell-variabler. Hvis der gives mulighed, indstilles den angivne valgflag eller sletter dem som beskrevet i afsnittet Sx Argument List Processing. Den tredje brug af den indstillede kommando er at indstille værdierne for skalens positionsparametre til de angivne args. Hvis du vil ændre positionsparametrene uden at ændre nogle muligheder, skal du bruge `` - '' som det første argument, der skal indstilles. Hvis ingen args er til stede, vil den indstillede kommando slette alle positionsparametrene (svarende til eksekvering af `` shift $ #. '' ' variabel værdi Tildeler værdi til variabel. (Generelt er det bedre at skrive variabel = værdi i stedet for at brugesetVar setVarer beregnet til at blive brugt i funktioner, der tildeler værdier til variabler, hvis navne er bestået som parametre.) flytte n Skift positionsparametrene n gange. ENflytte indstiller værdien af $1 til værdien af $2 værdien af $2 til værdien af $3 og så videre, reducere værdien af $# af en. Hvis n er større end antallet af positionsparametre,flytte vil udstede en fejlmeddelelse og afslutte med returstatus 2. gange Udskriv de akkumulerede bruger- og systemtider for skallen og for processer, der løber fra skallen. Returstatusen er 0. fælde handling signal… Årsag skalen til at analysere og udføre handling, når et af de angivne signaler er modtaget. Signalerne er angivet ved signalnummer. Hvis signal er0 handlingen udføres, når skallen udløber. handling kan være null eller `` - '' førstnævnte forårsager, at det angivne signal ignoreres, og sidstnævnte forårsager standard handling. Når skallen gaffel fra et underhul, nulstilles det indfanget (men ikke ignoreret) signaler til standardhandlingen. Detfælde kommandoen har ingen effekt på signaler, der blev ignoreret ved adgang til skallen. type navn … Tolk hvert navn som en kommando og udskrive opløsningen af kommandosøgningen. Mulige opløsninger er: shell-søgeord, alias, shell builtin, kommando, sporet alias og ikke fundet. For aliaser udskrives aliasudvidelsen; for kommandoer og sporede aliaser udskrives hele kommandoen til kommandoen. ulimit-H-S -a -tfdscmlpn værdi Forhør om eller indstil de hårde eller bløde grænser for processer eller indstil nye grænser.Valget mellem hård grænse (som ingen proces må overtræde, og som måske ikke hæves, når den er blevet sænket) og blødgrænse (hvilket får processer til at signaleres, men ikke nødvendigvis dræbes, og som kan hæves) laves med disse flag: -H sæt eller spørg om hårde grænser -S sæt eller spørg om bløde grænser. Hvis hverken -H heller ikke -S er angivet, den bløde grænse vises eller begge grænser er indstillet. Hvis begge er angivet, vinder den sidste. Grænsen for at blive forhørt eller indstillet vælges ved at angive et af disse flag: -en vis alle nuværende grænser -t vis eller indstil grænsen for CPU-tid (i sekunder) -f vis eller indstil grænsen på den største fil, der kan oprettes (i 512 byte blokke) -d vis eller indstil grænsen for datasegmentets størrelse på en proces (i kilobytes) -s vis eller indstil grænsen for stakstørrelse af en proces (i kilobytes) -c vis eller indstil grænsen på den største kerne dump størrelse, der kan produceres (i 512 byte blokke) -m vis eller indstil grænsen for den samlede fysiske hukommelse, der kan bruges af en proces (i kilobytes) -l vis eller indstil grænsen for hvor meget hukommelse en proces kan låse med mlock (2) (i kilobytes) -p vis eller indstil grænsen for antallet af processer, som denne bruger kan have på én gang -n vis eller indstil grænsen for de nummerfiler, en proces kan have åbnet på én gang Hvis ingen af disse er angivet, er det grænsen for filstørrelse, der vises eller indstilles. Hvis værdien er angivet, er grænsen sat til dette nummer; ellers vises den aktuelle grænse. Grænser for en vilkårlig proces kan vises eller indstilles ved hjælp af sysctl (8) hjælpeprogrammet. umask maske Indstil værdien af umask (se umask (2)) til den angivne oktalværdi. Hvis argumentet udelades, skrives umask-værdien. unalias--en navn Hvis navn er angivet, skalen fjerner aliaset. Hvis --en er angivet, alle aliaser fjernes. frakoblet navn… De angivne variabler og funktioner er uafbrudt og ikke eksporteret. Hvis et givet navn svarer til både en variabel og en funktion, er både variablen og funktionen frakoblet. vente job Vent til det angivne job for at fuldføre og returnere exitstatus for den sidste proces i jobbet. Hvis argumentet udelades, skal du vente på alle job, der skal udfyldes, og returnere en exitstatus på nul. Hvornårsh bruges interaktivt fra en terminal, den nuværende kommando og kommandoprogrammet (sefc i Sx Builtins) kan redigeres ved hjælp af vi-mode kommandolinje redigering. Denne tilstand bruger kommandoer, beskrevet nedenfor, svarende til en delmængde af dem, der er beskrevet på vi man-siden. Kommandoen `set '-o vi aktiverer vi-mode redigering og placere sh i vi insert mode. Med vi-mode aktiveret, kan sh skiftes mellem indsætningsmodus og kommandotilstand. Redaktøren er ikke beskrevet i sin helhed her, men vil være i et senere dokument. Det ligner vi: at skrive Aq ESC vil kaste dig i kommando VI kommandotilstand. At trykke på Aq retur, mens kommandotilstanden passerer linjen til skallen. Brug mand kommando ( % mand ) for at se, hvordan en kommando bruges på din computer. Citerer
backslash
Enkeltlige Citater
Dobbelt Citater
Reserverede ord
aliasser
kommandoer
Simple Commands
Søgning og udførelse
Sti søgning
Komplekse kommandoer
Rørledninger
Baggrundskommandoer -
Lister - generelt talende
Kortslutningsoperatører
Flow-Control Constructs - hvis, mens, for, sag
Gruppering af kommandoer sammen
Variabler og parametre
Positionsparametre
Særlige parametre
Tilde Expansion (erstatter en brugers hjemmekatalog)
Parameterudvidelse
Aritmetisk udvidelse
White Space Splitting (Field Splitting)
Pathname Expansion (Filnavn Generation)
Shell mønstre
builtins
Kommandolinje redigering




