Skip to main content

Aska - Linux Command

How To FIX "GRUB RESCUE ERROR" with LINUX on any COMPUTER / PC / LAPTOP (EASY METHOD) (Juni 2026)

How To FIX "GRUB RESCUE ERROR" with LINUX on any COMPUTER / PC / LAPTOP (EASY METHOD) (Juni 2026)
Anonim

NAMN

sh - kommandotolk (skal)

SYNOPSIS

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

BESKRIVNING

Sh är standardkommandotolk för systemet. Den nuvarande versionen avsh är i färd med att ändras för att överensstämma medPOSIX 1003.2 och 1003.2a specifikationer för skalet. Den här versionen har många funktioner som gör att den i vissa avseenden liknar Korn-skalet, men det är inte en Korn-skalklon (se ksh (1)). Endast funktioner utsedda avPOSIX plus några Berkeley-förlängningar, införlivas i detta skal. Vi förväntar ossPOSIX överensstämmelse vid tiden 4.4 BSD släpps. Den här mansidan är inte avsedd att vara en handledning eller en fullständig specifikation av skalet.

Översikt

Skalet är ett kommando som läser rader från antingen en fil eller terminalen, tolkar dem och utför i allmänhet andra kommandon. Det är det program som körs när en användare loggar in i systemet (även om en användare kan välja ett annat skal med kommandot chsh (1). Skalet implementerar ett språk som har flödeskontrollkonstruktioner, en makroanläggning som ger en mängd olika funktioner utöver datalagring, tillsammans med inbyggd historia och radredigeringsfunktioner. Den innehåller många funktioner för att stödja interaktiv användning och har fördelen att tolkningsspråket är vanligt för både interaktiv och icke-interaktiv användning (skalskript). Det vill säga kommandon kan skrivas direkt till det löpande skalet eller kan läggas i en fil och filen kan utföras direkt av skalet.

Åkallan

Om inga args är närvarande och om standardinmatningen på skalet är ansluten till en terminal (eller om -jagflaggan är inställd) och -c alternativet är inte närvarande, skallet anses vara ett interaktivt skal. Ett interaktivt skal uppmanas generellt före varje kommando och hanterar programmerings- och kommandofel på olika sätt (som beskrivs nedan). När den först startar inspekterar skalet argument 0, och om det börjar med ett streck `- ', anses skalet också vara ett inloggningsskal. Detta görs normalt automatiskt av systemet när användaren loggar in. Ett inloggningsskal läser först kommandon från filerna / etc / profile och .profile om de existerar. Om miljövariabelnENV är inställd vid inmatning till ett skal, eller är inställt i .profilen av ett inloggningsskal, läser skalet kommandon från filen som heter iENVDärför bör en användare placera kommandon som ska utföras endast vid inloggningstid i .profilen, och kommandon som exekveras för varje skal inutiENV fil. För att ställa inENV variabel till någon fil, placera följande rad i din .profil i din hemkatalog

ENV = $ HOME / .shinit; exportera ENV

ersätta `` .shinit '' vilket filnamn du önskar. SedanENV filen läses för varje påkallelse av skalet, inklusive skalskript och icke-interaktiva skal, är följande paradigm användbart för att begränsa kommandon iENV fil till interaktiva inbjudningar. Placera kommandon inom `` fallet '' och `` esac '' nedan (dessa kommandon beskrivs senare):

fall $ - in * jag *)

# kommandon endast för interaktiv användning

esac

Om kommandoradsargument utöver alternativen har specificerats behandlar skalet det första argumentet som namnet på en fil för att läsa kommandon (ett skalskript) och de återstående argumenten är inställda som skalets positionsparametrar ($ 1 , $ 2, etc). I annat fall läser skalet kommandon från standardinmatningen.

Argument List Processing

Alla enskilda bokstäver har ett motsvarande namn som kan användas som argument till -o alternativ. Uppsättningen -o Namnet finns bredvid alternativet med enkla bokstäver i beskrivningen nedan. Om du anger ett dash `` - '' aktiveras alternativet, medan du använder ett plus `` + '' inaktiverar alternativet. Följande alternativ kan ställas in från kommandoraden eller med uppsättningen (1) inbyggd (beskrivs senare).

-en allexport

Exportera alla variabler tilldelade till. (UNIMPLEMENTED for 4.4alpha)

-c

Läs kommandon från kommandoraden. Inga kommandon kommer att läsas från standardinmatningen.

-C noclobber

Skriv inte över befintliga filer med ``> '' (UNIMPLEMENTED for 4.4alpha)

-e errexit

Om det inte är interaktivt, avsluta omedelbart om ett otestat kommando misslyckas. Utgångsstatusen för ett kommando anses vara explicit testat om kommandot används för att styra enom elifwhile ellerfram tills eller om kommandot är den vänstra operand av en `` && '' eller `` || '' operatör.

-f noglob

Inaktivera sökvägsexpansion.

-n noexec

Om det inte är interaktivt, läs kommandon, men kör inte dem. Detta är användbart för att kontrollera syntaxen på skalskript.

-u nounset

Skriv ett meddelande till standardfel när du försöker expandera en variabel som inte är inställd, och om skalet inte är interaktivt, avsluta genast. (UNIMPLEMENTED for 4.4alpha)

-v mångordig

Skalet skriver sin ingång till standardfelet som det läses. Användbar för debugging.

-x xtrace

Skriv varje kommando till standardfel (föregås av en `+ 'innan den körs. Användbar för debugging.

-q quietprofile

Om -v eller -x alternativ har ställts in, använd inte dem när du läser initialiseringsfiler, dessa är / etc / profile .profile och filen som anges avENV miljöfaktor.

-JAG ignoreeof

Ignorera EOF: s från inmatning när det är interaktivt.

-jag interaktiv

Tvinga skalet att fungera interaktivt.

-m övervaka

Slå på jobbkontroll (ställ automatiskt in när det är interaktivt).

-s stdin

Läs kommandon från standardinmatning (ställ automatiskt in om inga filargument finns). Det här alternativet har ingen effekt när den är inställd efter att skalet redan har börjat springa (dvs med set (1)).

-V vI

Aktivera den inbyggda vi (1) kommandoradsredigeraren (inaktiverar -E om den har ställts in).

-E emacs

Aktivera den inbyggda emacs (1) kommandoradsredigeraren (inaktiverar -V om den har ställts in).

-b anmäla

Aktivera asynkron anmälan av bakgrundsarbete. (UNIMPLEMENTED for 4.4alpha)

Lexical Structure

Skalet läser in i form av rader från en fil och bryter upp det i ord på blankytor (blankor och flikar) och vid vissa sekvenser av tecken som är speciella för skalet som heter `` operatörer '' Det finns två typer av operatörer: kontrolloperatörer och omdirigeringsoperatörer (deras mening diskuteras senare). Följande är en lista över operatörer:

"Kontrolloperatörer:"

& && ( ) ; ;; | ||

"Omdirigeringsoperatör:"

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

citerar

Citat används för att ta bort den speciella betydelsen av vissa tecken eller ord till skalet, som operatörer, blankutrymme eller nyckelord. Det finns tre typer av citat: matchade enkla citat, matchade dubbla citat och backslash.

bakstreck

En backslash bevarar den bokstavliga betydelsen av följande tecken, med undantag för Aq newline. En backslash som föregår en Aq newline behandlas som en linje fortsättning.

Enkla citat

Omslutande tecken i enkla citat bevarar bokstavsbetydelsen av alla tecken (förutom enstaka citat, vilket gör det omöjligt att sätta ensidiga citat i en enda citat).

Dubbla citat

Omslutande tecken inom dubbla citat bevarar den bokstavliga betydelsen av alla tecken förutom dollarign ($) backquote (`) och backslash () Baksteget i dubbla citat är historiskt konstigt och tjänar endast att citera följande tecken:

$ `

Annars är det bokstavligt.

Reserverade ord

Reserverade ord är ord som har särskild betydelse för skalet och är erkända i början av en rad och efter en kontrolloperatör. Följande är reserverade ord:

! TaElif Ta fi Ta medan Ta väska

annars Taför Ta ta Ta {Ta}

gör Tagjort Ta tills Ta om Ta esac

Deras betydelse diskuteras senare.

alias

Ett alias är ett namn och motsvarande värde satt med kommandot alias (1) builtin. När ett reserverat ord kan inträffa (se ovan) och efter att ha kontrollerat reserverade ord kontrollerar skalet ordet för att se om det matchar ett alias. Om det gör det ersätter det det i ingångsströmmen med dess värde. Till exempel, om det finns ett alias som kallas `` lf '' med värdet `` ls -F '', då ingången:

om foobar

skulle bli

ls -F foobar

Alias ​​ger ett bekvämt sätt för naiva användare att skapa stenografi för kommandon utan att behöva lära sig hur man skapar funktioner med argument. De kan också användas för att skapa lexiskt obskyrlig kod. Denna användning är avskräckt.

kommandon

Skalet tolkar orden som det läser enligt ett språk, vars specifikation ligger utanför denna mans sida (se BNF iPOSIX 1003.2 dokument). I grund och botten läses en linje och om det första ordet av linjen (eller efter en kontrolloperatör) inte är ett reserverat ord, har skalet ett enkelt kommando igenkänt. Annars kan ett komplext kommando eller någon annan speciell konstruktion ha blivit igenkänd.

Enkla kommandon

Om ett enkelt kommando har blivit känt, utför skalet följande åtgärder:

  1. Ledande ord i formuläret `` name = value '' avlägsnas och tilldelas miljön för det enkla kommandot. Omdirigeringsoperatörer och deras argument (som beskrivs nedan) avlägsnas och sparas för bearbetning.

  2. De återstående orden expanderas enligt beskrivningen i avsnittet `` Expansions '' 'och det första återstående ordet betraktas som kommandonamnet och kommandot är beläget. De återstående orden betraktas som kommandotets argument. Om inget kommandonamn resulterade, påverkar variabeluppdragen `` name = value '' som är erkända i punkt 1 det aktuella skalet.

  3. Omdirigeringar utförs som beskrivs i nästa avsnitt.

omdirigeringar

Omdirigeringar används för att ändra var ett kommando läser inmatningen eller skickar utmatningen. Generellt, omdirigeringar öppnar, stänger eller duplicerar en befintlig referens till en fil. Det övergripande formatet som används för omdirigering är:

n redir-op-fil

var redir-op är en av omdirigeringsoperatörerna som nämnts tidigare. Nedan följer en lista över möjliga omdirigeringar. Bq n är ett valfritt tal, som i `3 '(inte` Bq 3' som refererar till en filbeskrivare.

n> fil

Omdirigera standardutgången (eller n) till filen.

n> | fil

Samma men åsidosätta -C alternativ.

n >> fil

Lägg till standardutmatning (eller n) till fil.

n <fil

Omdirigera standardinmatning (eller n) från filen.

n1 <& n2

Duplikera standardinmatningen (eller n1) från filbeskrivaren n2.

n <& -

Stäng standardinmatningen (eller n).

n1> & n2

Duplikera standardutgången (eller n1) från n2.

n> och -

Stäng standardutgången (eller n).

n <> fil

Öppna filen för läsning och skrivning på standardinmatning (eller n).

Följande omdirigering kallas ofta ett `` här-dokument ''

n << avgränsare

här-doc-text …

avgränsare

All text på successiva rader upp till avgränsaren sparas bort och görs tillgänglig för kommandot på standardinmatning, eller filbeskrivning n om den anges.Om avgränsaren som angivits på den ursprungliga linjen citeras, så behandlas här-doc-texten bokstavligen, annars påverkas texten i parameterutvidgning, kommandosubstitution och aritmetisk expansion (som beskrivs i avsnittet om "Expansions"). 'Om operatören är `` << -' 'istället för `` <<' ', avlägsnas ledande flikar i här-doc-texten.

Sök och utförande

Det finns tre typer av kommandon: skalfunktioner, inbyggda kommandon och normala program - och kommandot söker efter (efter namn) i den ordningen. De exekveras på ett annat sätt.

När en skalfunktion exekveras ställs alla skalpositionsparametrar (utom $ 0, som förblir oförändrade) till argumenten för skalfunktionen. De variabler som uttryckligen placeras i kommandos miljö (genom att placera uppdrag till dem före funktionsnamnet) görs lokalt för funktionen och är inställda på de angivna värdena. Då körs kommandot i funktionsdefinitionen. Positionsparametrarna återställs till sina ursprungliga värden när kommandot fullbordas. Allt detta sker inom det nuvarande skalet.

Shell builtins utförs internt till skalet utan att gyta en ny process.

Annars, om kommandonamnet inte matchar en funktion eller inbyggd, letas kommandot som ett normalt program i filsystemet (som beskrivs i nästa avsnitt). När ett normalt program körs, körs skalet programmet, som överför argumenten och miljön till programmet. Om programmet inte är en normal körbar fil (dvs. om den inte börjar med det "magiska numret" varsASCII representation är "#!", så execve (2) returnerar Er ENOEXEC då) ska skalet tolka programmet i en subshell. Barnskalet återupplöser sig i det här fallet, så att effekten blir som om ett nytt skal hade anropats för att hantera ad hoc-skalskriptet, förutom att placeringen av hashedkommandon i moderskalet kommer att komma ihåg av barn.

Observera att tidigare versioner av detta dokument och källkoden i sig är vilseledande och sporadiskt hänvisar till ett skalskript utan ett magiskt nummer som ett "skalförfarande".

Sökväg

När man lokaliserar ett kommando ser först skalet ut om det har en skalfunktion med det namnet. Sedan letar det efter ett inbyggt kommando med det namnet. Om ett inbyggt kommando inte hittas sker en av två saker:

  1. Kommandonamn som innehåller ett snedstreck utförs enkelt utan att göra några sökningar.

  2. Skalet söker efter varje inmatningVÄG i sin tur för kommandot. Värdet avVÄGvariabel bör vara en serie poster separerade av kolon. Varje post består av ett katalognamn. Den aktuella katalogen kan indikeras implicit av ett tomt katalognamn eller uttryckligen av en enda period.

Command Exit Status

Varje kommando har en utgångsstatus som kan påverka beteendet hos andra skalkommandon. Paradigmet är att ett kommando går ut med noll för normal eller framgång, och icke-noll för fel, fel eller en falsk indikation. Mänssidan för varje kommando ska ange de olika utgångskoderna och vad de menar. Dessutom returnerar de inbyggda kommandon utgångskoder, liksom en exekverad skalfunktion.

Komplexa kommandon

Komplexa kommandon är kombinationer av enkla kommandon med kontrolloperatörer eller reserverade ord, tillsammans skapar ett större komplext kommando. Mer generellt är ett kommando ett av följande:

  • enkelt kommando
  • rörledning
  • lista eller förteckningslista
  • sammansatt kommando
  • funktionsdefinition

Om inget annat anges är utgångsstatusen för ett kommando det för det sista enkla kommandot som körs av kommandot.

pipelines

En pipeline är en sekvens av en eller flera kommandon separerade av kontrolloperatören |. Standardutgången för alla utom det sista kommandot är kopplat till standardinmatningen för nästa kommando. Standardutgången från det sista kommandot är ärft från skalet, som vanligt.

Formatet för en rörledning är:

! command1 | command2 …

Standardutgången för kommando1 är kopplad till standardinmatningen av kommandot2. Standardinmatningen, standardutgången eller båda kommandot anses vara tilldelad av rörledningen innan någon omdirigering anges av omdirigeringsoperatörer som ingår i kommandot.

Om rörledningen inte finns i bakgrunden (diskuteras senare) väntar skalet på att alla kommandon ska slutföra.

Om det reserverade ordet! går inte före rörledningen, utgångsstatusen är utgångsstatus för det sista kommandot som anges i rörledningen. I annat fall är utgångsstatusen den logiska INTE av utgångsstatusen för det sista kommandot. Det vill säga, om det sista kommandot returnerar noll är utgångsstatusen 1; Om det sista kommandot returnerar mer än noll är utgångsstatus noll.

Eftersom pipeline-tilldelning av standardinmatning eller standardutgång eller båda sker före omdirigering kan den ändras genom omdirigering. Till exempel:

$ command1 2> & 1 | kommando2

skickar både standardutgången och standardfelet för kommandot1 till standardinmatningen av kommandot2.

A; eller terminator orsakar att föregående AND-OR-lista (beskrivs nästa) exekveras sekventiellt; a & orsakar asynkron utförande av föregående AND-OR-lista.

Observera att i motsats till några andra skal är varje process i rörledningen ett barn av det påkallande skalet (om det inte är ett skal inbyggt, i vilket fall det exekveras i det nuvarande skalet - men vilken effekt den har på miljön torkas).

Bakgrundskommandon -

Om ett kommando avslutas av kontrolloperatören ampersand (&), utför skalet kommandot asynkront - det vill säga att skalet inte väntar på att kommandot ska slutföras innan du utför nästa kommando.

Formatet för att köra ett kommando i bakgrunden är:

command1 & command2 & …

Om skalet inte är interaktivt är standardinmatningen för ett asynkront kommando inställt på / dev / null

Listor - Generellt talar

En lista är en sekvens av noll eller flera kommandon separerade med nyfrekvenser, semikolon eller ampersands, och eventuellt avslutas av en av dessa tre tecken. Kommandon i en lista exekveras i den ordning de är skrivna. Om kommandot följs av en ampersand startar skalet kommandot och går genast till nästa kommando; annars väntar det på att kommandot avslutas innan man går vidare till nästa.

Kortslutningsoperatörer

`` && '' och `` || '' är AND-OR listoperatörer. `` && '' exekverar det första kommandot, och kör sedan det andra kommandot iff utträdesstatusen för det första kommandot är noll. `` || '' är likartad, men kör det andra kommandot iff utträdesstatusen för det första kommandot är nonzero. `` && '' och `` || '' båda har samma prioritet.

Flow-Control Constructs - om, medan, för, fall

Synkroniseringen av if-kommandot är

om listan

lista sedan

elif lista

lista sedan …

annan lista

fi

Synkommandot av kommandot samtidigt är

medan listan

göra lista

Gjort

De två listorna körs upprepade gånger medan utgångsläget för den första listan är noll. Fram tills kommandot är likartat men har ordet tills det är i stället för det, vilket får det att upprepas tills utgångsläget för den första listan är noll.

Synkoden för kommandot är

för variabel i ord …

göra lista

Gjort

Orden utökas, och sedan exekveras listan upprepade gånger med variabeln inställd på varje ord i sin tur. gör och gjort kan ersättas med `` {'' och ``} ''

Syntaxen för pausen och fortsätt kommandot är

bryta num

fortsätt num

Break avslutar numret innerst för eller under loopar. Fortsätt fortsätter med nästa iteration av innersta slingan. Dessa implementeras som inbyggda kommandon.

Ordbokens syntax är

fallord i

mönster) lista ;;

esac

Mönstret kan faktiskt vara ett eller flera mönster (se Shell Patterns beskrivna senare), åtskilda av `` '' tecken.

Grupperingskommandon tillsammans

Kommandon kan grupperas genom att skriva antingen

(lista)

eller

{list;

Den första av dessa exekverar kommandon i en delskal. Inbyggda kommandon som är grupperade i en (lista) påverkar inte det aktuella skalet. Den andra formen gafflar inte ett annat skal så det är lite effektivare. Gruppering av kommandon tillsammans så här kan du omdirigera deras produktion som om de var ett program:

{printf hej; printf world n ";}> hälsning

funktioner

Syntaxen för en funktionsdefinition är

namn () kommando

En funktionsdefinition är ett körbart uttalande; när den körs installerar den en funktion som heter namn och returnerar en utgångsstatus på noll. Kommandot är normalt en lista som är bifogad mellan `` {'' och ``} ''

Variabler kan förklaras vara lokala för en funktion med hjälp av ett lokalt kommando. Detta ska visas som den första uttalandet av en funktion, och syntaxen är

lokal variabel | - …

Lokal implementeras som ett inbyggt kommando.

När en variabel görs lokal, ärver den det ursprungliga värdet och exporteras och avlyssnar flaggor från variabeln med samma namn i det omgivande området, om det finns en. Annars är variabeln från början avstängd. Skalet använder dynamisk scoping, så att om du gör variabeln x local till funktion f, som då kallar funktion g, referenser till variabeln x gjord inuti g kommer att referera till variabeln x deklarerad inuti f, inte till den globala variabeln som heter x .

Den enda speciella parametern än vad som kan göras lokal är `` - '' Gör `` - '' lokala valfria skalalternativ som ändras via det inställda kommandot inuti funktionen som återställs till sina ursprungliga värden när funktionen returneras.

Synkroniseringen av returkommandot är

returnera exitstatus

Den avslutar den nuvarande exekveringsfunktionen. Retur implementeras som ett inbyggt kommando.

Variabler och parametrar

Skalet behåller en uppsättning parametrar. En parameter betecknad med ett namn kallas en variabel. När du startar omvandlar skalet alla miljövariabler till skalvariabler. Nya variabler kan ställas in med formuläret

name = värde

Variabler som anges av användaren måste ha ett namn som enbart består av alfabetiska, numeriska och underskrifter - den första måste inte vara numerisk. En parameter kan också betecknas med ett tal eller ett specialtecken som förklaras nedan.

Positionsparametrar

En positionsparameter är en parameter betecknad med ett tal (n> 0). Skalet sätter dessa initialt till värdena för dess kommandoradsargument som följer namnet på skalskriptet. Satsen (1) inbyggd kan också användas för att ställa in eller återställa dem.

Särskilda parametrar

En särskild parameter är en parameter betecknad med en av följande specialtecken. Värdet på parametern är listad bredvid dess tecken.

*

Expanderar till positionsparametrarna, från en början. När expansionen sker inom en dubbelvitrad sträng expanderar den till ett enda fält med värdet för varje parameter separerat med den första tecknet avIFS variabel eller av a omIFS är avstängd.

@

Expanderar till positionsparametrarna, från en början.När expansionen sker inom dubbla citat, expanderar varje positionsparameter som ett separat argument. Om det inte finns några positionsparametrar genererar utvidgningen av @ nollargument, även när @ är dubbelnoterad. Vad detta egentligen betyder är om $ 1 är `` abc '' och $ 2 är `` def ghi '' och Qq $ @ expanderar till de två argumenten:

abc def ghi

#

Expanderar till antalet positionsparametrar.

?

Expanderar till utgångsläget för den senaste pipeline.

- (Hyphen.)

Expanderar till de nuvarande alternativflaggarna (namnen på enkla bokstäver sammanfogade till en sträng) som anges vid anrop, av det inbyggda kommandot eller implicit av skalet.

$

Expanderar till process ID för det påkallade skalet. En delhöjd behåller samma värde av $ som dess förälder.

!

Expanderar till process ID för det senaste bakgrundskommandot som utförs från det aktuella skalet. För en pipeline är process ID den för det sista kommandot i rörledningen.

0 (Noll.)

Expanderar till namnet på skalet eller skalskriptet.

Ordutvidgningar

Denna klausul beskriver de olika utvidgningar som utförs på ord. Inte alla expansioner utförs på varje ord, som förklaras senare.

Tilde-utvidgningar, parameterutvidgningar, kommandosubstitutioner, aritmetiska utvidgningar och citatförskjutningar som inträffar inom ett enda ord utökas till ett enda fält. Det är bara fältuppdelning eller söknamnsexpansion som kan skapa flera fält från ett enda ord. Det enda undantaget från denna regel är expansionen av den speciella parametern @ inom dubbla citat, som beskrivits ovan.

Ordningsexpansionen är:

  1. Tilde Expansion, Parameter Expansion, Command Substitution, Aritmetic Expansion (dessa uppträder samtidigt).

  2. Fältuppdelning utförs på fält som genereras av steg (1) såvida inteIFS variabeln är null.

  3. Bannamn Expansion (om inte set -f är i kraft).

  4. Citatavlägsnande.

$ Tecknet används för att introducera parameterutvidgning, kommandosubstitution eller aritmetisk utvärdering.

Tilde Expansion (ersätter en användares hemkatalog)

Ett ord som börjar med ett oboterat tillde tecken (~) utsätts för tillde expansion. Alla tecken upp till ett snedstreck (/) eller slutet av ordet behandlas som ett användarnamn och ersätts med användarens hemkatalog. Om användarnamnet saknas (som i ~ / foobar) ersätts tildelen med värdet av HEM variabel (den nuvarande användarens hemkatalog).

Parameter Expansion

Formatet för parameterutvidgning är enligt följande:

$ {Uttryck}

där uttrycket består av alla tecken tills det matchande ``} '' Any``} '' flyktas av en backslash eller inom en citerad sträng, och tecken i inbäddade aritmetiska expansioner, kommandosubstitutioner och variabla expansioner undersöks inte vid bestämning av matchande ``} ''

Den enklaste formen för parameterutvidgning är:

$ {Parameter}

Värdet, om någon, av parametern är ersatt.

Parameterns namn eller symbol kan bifogas i fästen, vilka är frivilliga förutom positionsparametrar med mer än en siffra eller när parametern följs av ett tecken som kan tolkas som en del av namnet. Om en parameterutvidgning uppträder inom dubbla citat:

  1. Expansionen av söknamn utförs inte på resultaten av expansionen.

  2. Fältfördelning utförs inte på resultaten av expansionen, med undantag för @.

Dessutom kan en parameterutvidgning ändras genom att använda ett av följande format.

$ {Parameter: -ord}

Använd standardvärden. Om parametern är avstängd eller null ersätts ordförlängningen; annars är värdet av parametern ersatt.

$ {Parameter: = ord}

Tilldela standardvärden. Om parametern är avstängd eller null, tilldelas utvidgningen av ord till parametern. I alla fall ersätts det slutliga värdet av parametern. Endast variabler, inte positionsparametrar eller speciella parametrar, kan tilldelas på detta sätt.

$ {Parameter: word}

Ange fel om Null eller Unset. Om parametern är avstängd eller null, är expansionen av ord (eller ett meddelande som indikerar att det är avstängt om ett ord utelämnas) skrivet till standardfel och skalet avslutas med en icke-sändningsstatus. I annat fall ersätts värdet av parametern. Ett interaktivt skal behöver inte avslutas.

$ {Parameter: + ord}

Använd alternativt värde. Om parametern är avstängd eller null ersätts null; Annars är utvidgningen av ordet ersatt.

I parameterns utvidgningar som visats tidigare resulterar användningen av kolon i formatet ett test för en parameter som är avstängd eller null. utelämnande av tjocktarmen resulterar i ett test för en parameter som bara är avstängd.

$ {# Parameter}

Stränglängd. Längden i tecken på värdet av parameteren.

Följande fyra varianter av parameterutvidgning möjliggör substringbearbetning. I varje fall används mönstermatchningsnotering (se Shell Patterns), i stället för vanlig expressionsnotering, för att utvärdera mönstren. Om parametern är * eller @, är resultatet av expansionen ospecificerat. Om du lägger till den fullständiga parameterns expansionssträng i dubbla citat orsakar inte följande fyra sorter av mönster tecken, medan citerande tecken inom axlarna har denna effekt.

$ {Parameter% ord}

Ta bort minsta suffixmönstret. Ordet expanderas för att skapa ett mönster. Parameterutvidgningen resulterar då i parameter, med den minsta delen av suffixet som matchas av det raderade mönstret.

$ {Parameter %% ord}

Ta bort största muffinsmönstret.Ordet expanderas för att skapa ett mönster. Parameterutvidgningen resulterar då i parameter, med den största delen av suffixet som matchas av det raderade mönstret.

$ {Parameter # ord}

Ta bort minsta prefixmönstret. Ordet expanderas för att skapa ett mönster. Parameterutvidgningen resulterar då i parameter, med den minsta delen av prefixet som matchas av mönstret raderat.

$ {Parameter ## ord}

Ta bort största prefixmönstret. Ordet expanderas för att skapa ett mönster. Parameterutvidgningen resulterar då i parameter, varvid den största delen av prefixet matchas av det raderade mönstret.

Command Substitution

Kommandosubstitution gör att utmatningen av ett kommando kan ersättas istället för själva kommandonamnet. Kommandosubstitution sker när kommandot är bifogat enligt följande:

$ (Kommando)

eller Po `` backquoted''version Pc:

`command`

Skalet expanderar kommandosubstitutionen genom att utföra kommandot i en subshell-miljö och ersätta kommandosubstitutionen med standardutmatningen av kommandot, avlägsna sekvenser av en eller flera s vid slutet av substitutionen. (Inbäddad s innan utgången av utgången inte tas bort; Men under fältuppdelning kan de översättas till s, beroende på värdet påIFS och citat som är i kraft.)

Aritmetisk expansion

Aritmetisk expansion ger en mekanism för att utvärdera ett aritmetiskt uttryck och ersätta dess värde. Formatet för aritmetisk expansion är som följer:

$ ((Uttryck))

Uttrycket behandlas som om det var i dubbla citat, förutom att en dubbel citat i uttrycket inte behandlas speciellt. Skalet expanderar alla tokens i uttrycket för parameterutvidgning, kommandosubstitution och citatavlägsnande.

Därefter behandlar skalet detta som ett aritmetiskt uttryck och ersätter värdet av uttrycket.

White Space Splitting (Field Splitting)

Efter parameterutvidgning, kommandosubstitution och aritmetisk expansion skannar skalet resultaten av expansioner och substitutioner som inte uppstod i dubbla citat för fältuppdelning och flera fält kan resultera.

Skalet behandlar varje tecken påIFS som en avgränsare och använd avgränsarna för att dela upp resultaten av parameterutvidgning och kommandosubstitution i fält.

Namnutvidgning (filnamngenerering)

Om inte -f flaggan är inställd, genereras filnamn efter att orduppdelningen är klar. Varje ord ses som en serie mönster, åtskilda av snedstreck. Expansionsprocessen ersätter ordet med namnen på alla befintliga filer vars namn kan bildas genom att ersätta varje mönster med en sträng som matchar det angivna mönstret. Det finns två begränsningar för detta: För det första kan ett mönster inte matcha en sträng som innehåller ett snedstreck, och för det andra kan ett mönster inte matcha en sträng som börjar med en period såvida inte mönstrets första tecken är en period. I nästa avsnitt beskrivs de mönster som används för både Pathname Expansion och case (1) -kommandot.

Shell Mönster

Ett mönster består av normala tecken, som matchar sig och meta-tecken. Meta-tecknen är `` `` `` `* ''` `? '' Och` `'' Dessa tecken förlorar sina speciella betydelser om de citeras. När kommando- eller variabel substitution utförs och dollarns tecken eller tillbaka citat inte är dubbelt citerade, skannas värdet av variabeln eller kommandot av kommandot för dessa tecken och de omvandlas till metatag.

En asterisk (`` * '') matchar alla strängar av tecken. Ett frågetecken matchar alla enskilda tecken. En vänster konsol (`` '') introducerar en tecken klass. Slutet på teckenklassen indikeras av en (`` '') om `` 'saknas då `` ' 'matchar en `` ' 'istället för att introducera en teckenklass. En teckenklass matchar någon av tecknen mellan de firkantiga parenteserna. Ett antal tecken kan anges med ett minustecken. Karaktärklassen kan kompletteras med att utropsteckenskaraktärens första karaktär.

För att inkludera en `` '' i en teckenklass gör du den första bokstaven som anges (efter ``! '' Om det finns några). För att inkludera ett minustecken, gör det det första eller sista tecknet som anges

builtins

Det här avsnittet innehåller de inbyggda kommandon som är inbyggda eftersom de behöver utföra en viss operation som inte kan utföras med en separat process. Förutom dessa finns det flera andra kommandon som kan byggas in för effektivitet (t ex eko 1).

:

Ett nollkommando som returnerar ett 0 (true) exitvärde.

. fil

Kommandon i den angivna filen läses och exekveras av skalet.

alias namn = sträng …

Om name = sträng specificeras, skalet definierar aliaset namn med värde sträng Om bara namn är angivet, värdet på aliaset namn skrivs ut. Inga argument, denalias inbyggd skriver ut namnen och värdena för alla definierade aliaser (seunalias)

bg jobb …

Fortsätt med angivna jobb (eller det aktuella jobbet om inga jobb anges) i bakgrunden.

kommando kommando arg …

Kör det angivna inbyggda kommandot. (Detta är användbart när du har en skalfunktion med samma namn som ett inbyggt kommando.)

CD katalog

Växla till den angivna katalogen (standard$ HOME) Om en post förCDPATH visas i miljön avCD kommandot eller skalvariabelnCDPATH är inställd och katalognamnet börjar inte med ett snedstreck, då katalogerna listade iCDPATH kommer att söka efter den angivna katalogen. Formatet avCDPATH är samma som förVÄG I ett interaktivt skal,CD Kommandot skriver ut namnet på den katalog som den faktiskt bytte till om detta skiljer sig från det namn som användaren gav. Dessa kan vara olika, antingen för attCDPATH mekanismen användes eller eftersom en symbolisk länk korsades.

eval sträng…

Sammanfoga alla argument med mellanslag. Därefter parsar och kör kommandot igen.

exec kommando arg …

Om inte kommandot utelämnas ersätts skalprocessen med det angivna programmet (vilket måste vara ett riktigt program, inte ett inbyggt skal eller funktion). Eventuella omdirigeringar påexecKommandot är markerat som permanent, så att de inte återkallas närexec kommandotäckningar.

utgång exitstatus

Avsluta skalprocessen. Om exitstatus ges det används som utgångsstatus för skalet; annars används utgångsstatusen för föregående kommando.

exportera namn…

export -p

De angivna namnen exporteras så att de kommer att visas i miljön för efterföljande kommandon. Det enda sättet att exportera en variabel är att avaktivera den. Skalet gör att värdet av en variabel kan ställas in samtidigt som det exporteras genom att skriva

exportnamn = värde

Inga argument innehåller exportkommandon namnen på alla exporterade variabler. Med -pDet angivna alternativet kommer att formateras lämpligt för icke-interaktiv användning.

fc-e redaktör först sista

fc-l -nr först sista

fc-s gammalt = new först

Defc inbyggda listor, eller redigeringar och återexekveringar, kommandon som tidigare skrivits in i ett interaktivt skal.

-e redaktör

Använd redigeraren som heter av redaktör för att redigera kommandona. Redigeringssträngen är ett kommandonamn, föremål för sökning viaVÄG variabel. Värdet iFCEDIT variabel används som standard när -e är inte specificerad. OmFCEDIT är null eller oupplöst, värdet avREDAKTÖR variabel används. OmREDAKTÖR är null eller oupplöst, ed (1) används som redigerare.

-l (ell)

Lista kommandona istället för att anropa en redigerare på dem. Kommandon är skrivna i den sekvens som anges av de första och sista operanderna, som påverkas av -r med varje kommando föregås av kommandonumret.

-n

Undertryck kommandonumren när du listar med -l.

-r

Omvänd ordningen för kommandon som anges (med -l eller redigeras (med varken -l inte heller -s)

-s

Utför kommandot utan att anropa en redigerare.

först

sista

Välj kommandon för att lista eller redigera. Antalet tidigare kommandon som kan nås bestäms av värdet avHISTSIZE variabel. Värdet av första eller sista eller båda är ett av följande:

+ Nummer

Ett positivt tal som representerar ett kommandonummer; kommandonumren kan visas med -l alternativ.

-siffra

Ett negativt decimaltal som representerar det kommando som exekverades antal kommandon tidigare. Till exempel är -1 det omedelbart föregående kommandot.

sträng

En sträng som anger det senast inmatade kommandot som börjar med den strängen. Om den gamla = nya operand inte är specificerad med -s strängformen för den första operand kan inte innehålla ett inbäddat lika tecken.

Följande miljövariabler påverkar utförandet av fc:

FCEDIT

Namn på redaktören som ska användas.

HISTSIZE

Antalet tidigare kommandon som är tillgängliga.

fg jobb

Flytta det angivna jobbet eller det aktuella jobbet till förgrunden.

getopts optstring var

DePOSIX getopts kommando, att inte förväxlas med Bell Labs -medveten getopt (1).

Det första argumentet bör vara en serie bokstäver, vilka var och en eventuellt kan följas av ett kolon för att indikera att alternativet kräver ett argument. Den angivna variabeln är inställd på det analyserade alternativet.

Degetopts kommandot deprecates det äldre getopt (1) verktyget på grund av dess hantering av argument som innehåller blankutrymme.

Degetopts inbyggd kan användas för att få alternativ och deras argument från en lista med parametrar. När det åberopas,getopts placerar värdet av nästa alternativ från alternativsträngen i listan i skalvariabeln som anges av var och det är index i skalvariabelnOPTIND När skalet påkallas,OPTIND initialiseras till 1. För varje alternativ som kräver ett argument, skagetopts inbyggd kommer att placera den i skalvariabelnoptarg Om ett alternativ inte är tillåtet för i flaggsträng sedanoptarg kommer att stängas av.

flaggsträng är en rad erkända alternativbrev. Om ett brev följs av ett kolon förväntas alternativet ha ett argument som kanske inte separeras från det med vitt utrymme. Om ett alternativtecken inte hittas där förväntat,getopts kommer att ställa in variabeln var till en ``? ''getopts kommer då att stängas avoptarg och skriv utdata till standardfel. Genom att ange en kolon som första tecken på flaggsträng alla fel kommer att ignoreras.

Ett nonzero-värde returneras när det sista alternativet nås. Om det inte finns några återstående argument,getopts kommer sätta var till det speciella alternativet `` - '' annars kommer det att ställa in var till ``? ''

Följande kodfragment visar hur man kan bearbeta argumenten för ett kommando som kan ta alternativen a och b och alternativet c som kräver ett argument.

medan getopts abc: fdofallet $ f ia | b) flagga = $ f ;;c) carg = $ OPTARG ;;?) echo $ USAGE; utgång 1;esacGjortskift `expr $ OPTIND - 1`

Denna kod kommer att acceptera något av följande som ekvivalent:

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

hash-rv kommando…

Skalet håller ett hashbord som kommer ihåg platserna för kommandon. Med inga argument allshash Kommandot skriver ut innehållet i denna tabell. Inlägg som inte har blivit sedda sedan senastCD Kommandot är markerat med en asterisk; Det är möjligt att dessa poster är ogiltiga.

Med argument, denhash Kommando tar bort de angivna kommandona från hash-tabellen (om inte de är funktioner) och sedan lokaliserar dem. Med -v Alternativ, hash skriver platserna för kommandon som den finner dem. The -r Alternativet gör att hash-kommandot raderar alla poster i hash-tabellen förutom funktioner.

jobb id jobb

Skriv ut processens ID för processerna i jobbet. Om jobb argumentet utelämnas, det aktuella jobbet används.

jobb

I det här kommandot listas alla bakgrundsprocesser som är barn i den nuvarande skalprocessen.

pwd

Skriv ut den aktuella katalogen. Det inbyggda kommandot kan skilja sig från programmet med samma namn eftersom det inbyggda kommandot kommer ihåg vad den aktuella katalogen är istället för att omprogrammera den varje gång. Detta gör det snabbare. Om den nuvarande katalogen omdirigeras, är den inbyggda versionen avpwd fortsätter att skriva ut det gamla namnet för katalogen.

läsa-p prompt -r variabel…

Prompten skrivs ut om -p alternativet anges och standardinmatningen är en terminal. Sedan läses en rad från standardinmatningen. Den efterföljande nya linjen raderas från linjen och linjen delas som beskrivs i avsnittet om orduppdelning ovan och bitarna tilldelas variablerna i ordning. Minst en variabel måste anges. Om det finns fler bitar än variabler, återstående bitar (tillsammans med tecknen iIFS som separerade dem) tilldelas den senaste variabeln. Om det finns fler variabler än bitar, tilldelas de återstående variablerna nollsträngen. Deläsa inbyggd kommer att indikera framgång om inte EOF stöter på inmatning, i vilket fall felet returneras.

Som standard, om inte -r alternativet anges, slår backslash `` '' som en escape-karaktär, vilket gör att följande tecken behandlas bokstavligen. Om en backslash följs av en ny linje, kommer backslash och newline att raderas.

readonly namn…

readonly -p

De angivna namnen är markerade som skrivskyddade, så att de inte kan ändras eller avaktiveras senare. Skalet gör att värdet av en variabel kan ställas in samtidigt som det är markerat läsbart genom att skriva

readonly name = value

Inga argumenter listar kommandot readonly namnen på alla läsbara variabler. Med -p Det angivna alternativet kommer att formateras lämpligt för icke-interaktiv användning.

uppsättning { -alternativ | + alternativ | - arg …

Deuppsättning kommandot utför tre olika funktioner.

Med inga argument listas det värdena på alla skalvariabler.

Om alternativ ges, sätter den angivna alternativflaggan eller rensar dem enligt beskrivningen i avsnittet Sx Argument List Processing.

Den tredje användningen av det angivna kommandot är att ställa in värdena på skalets positionsparametrar till angivna args. För att ändra positionsparametrarna utan att ändra några alternativ, använd `` - '' som det första argumentet som ska ställas in. Om inga args är närvarande kommer det inställda kommandot att rensa alla positionsparametrar (motsvarande att exekvera `` shift $ #. ''

variabelt värde

Tilldelar värde till variabel. (Generellt är det bättre att skriva variabel = värde istället för att användasetVar setVarär avsedd att användas i funktioner som tilldelar värden till variabler vars namn överförs som parametrar.)

flytta n

Ändra positionsparametrarna n gånger. enflytta anger värdet av $1 till värdet av $2 värdet av $2 till värdet av $3 och så vidare, minskar värdet av $# av en. Om n är större än antalet positionsparametrar,flytta kommer att ge ett felmeddelande och avsluta med returstatus 2.

gånger

Skriv ut de ackumulerade användar- och systemtiderna för skalet och för processer som körs från skalet. Returstatusen är 0.

fälla verkan signal…

För att skalet ska analysera och utföra åtgärd när någon av de angivna signalerna tas emot. Signalerna specificeras av signalnummer. Om signal är0 åtgärden utförs när skalet går ut. verkan kan vara null eller `` - '' den förra orsakar att den angivna signalen ignoreras och den senare orsakar att standardåtgärden ska vidtas. När skalet gafflar av en subshell, återställs det fångade (men inte ignorerade) signaler till standardåtgärden. Defälla kommandot har ingen effekt på signaler som ignorerades vid tillträde till skalet.

typ namn …

Tolka varje namn som ett kommando och skriv ut upplösningen av kommandosökningen. Möjliga upplösningar är: Shell-nyckelord, alias, shell builtin, kommando, spårat alias och inte hittat. För aliaser skrivs aliasexpansionen ut; för kommandon och spårade aliaser skrivs hela banans namn på kommandot.

ulimit-H-S -a -tfdscmlpn värde

Fråga om eller ställ in de hårda eller mjuka gränserna för processer eller ställa in nya gränser.Valet mellan hårdgräns (som ingen process får bryta mot och som inte får höjas när den har sänkts) och mjukgränsen (vilket gör att processer signaleras men inte nödvändigtvis dödas och som kan höjas) görs med dessa flaggor:

-H

ställa in eller fråga om hårda gränser

-S

ställa in eller fråga om mjuka gränser. Om inte heller -H inte heller -S specificeras, mjukgränsen visas eller båda gränserna är inställda. Om båda är angivna vinner den sista.

Gränsen för att bli utfrågad eller inställd väljs sedan genom att ange någon av dessa flaggor:

-en

visa alla aktuella gränser

-t

visa eller ställa in gränsen för CPU-tid (i sekunder)

-f

visa eller ställa in gränsen för den största filen som kan skapas (i 512 byte-block)

-d

visa eller ställa in gränsen för datasegmentets storlek på en process (i kilobyte)

-s

visa eller ställa in gränsen för stapelstorlek för en process (i kilobyte)

-c

visa eller ställa in gränsen på den största kärndumpstorleken som kan produceras (i 512 byte-block)

-m

visa eller ställa in gränsen för det totala fysiska minnet som kan användas av en process (i kilobyte)

-l

visa eller ställa in gränsen för hur mycket minne en process kan låsa med mlock (2) (i kilobyte)

-p

visa eller ställa in gränsen för antalet processer som användaren kan ha vid en gång

-n

visa eller ställa in gränsen för de nummerfiler som en process kan öppna samtidigt

Om ingen av dessa anges, är det gränsen för filstorlek som visas eller ställs in. Om värdet anges, är gränsen inställd på det numret. annars visas nuvarande gräns.

Gränser för en godtycklig process kan visas eller ställas in med hjälp av sysctl (8) verktyget.

umask mask

Ange värdet för umask (se umask (2)) till det angivna oktalvärdet. Om argumentet utelämnas skrivs omaskvärdet ut.

unalias-en namn

Om namn specificeras, skalet tar bort det aliaset. Om -en anges, alla alias tas bort.

oskränkt namn…

De angivna variablerna och funktionerna är avstängda och outexporterade. Om ett givet namn motsvarar både en variabel och en funktion, är både variabeln och funktionen avstängd.

vänta jobb

Vänta på det angivna jobbet för att slutföra och returnera slutstatusen för den senaste processen i jobbet. Om argumentet utelämnas, vänta tills alla jobb ska slutföra och returnera en utgångsstatus med noll.

Kommandoradsredigering

Närsh används interaktivt från en terminal, det aktuella kommandot och kommandoraden (sefc i Sx Builtins) kan redigeras med hjälp av vi-mode kommandoradsredigering. Detta läge använder kommandon, som beskrivs nedan, som liknar en delmängd av de som beskrivs på vi man-sidan. Kommandot `set '-vi vi aktiverar vi-mode redigering och placera sh i vi insert-läge. Med vi-läge aktiverat kan sh växlas mellan inmatningsläge och kommandotillstånd. Redaktören beskrivs inte fullständigt här, men kommer att finnas i ett senare dokument. Det liknar vi: att skriva Aq ESC kommer att kasta dig till kommandot VI kommandot läge. Håller Aq-retur medan kommandotillståndet passerar linjen till skalet.

Använd man kommando ( % man ) för att se hur ett kommando används på din dator.