Writing full configuration files directly

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

6.3 Skriva fullständiga konfigurationsfiler direkt

`grub.cfg` är skriven i GRUB:s inbyggda skriptspråk, som har en syntax som liknar den i GNU Bash och andra Bourne-skalderivat.

Ord

Ett ord är en sekvens av tecken som GRUB betraktar som en enhet. Ord separeras av metatecken, som är följande plus mellanslag, tabb och radbrytning:

{ } | & $ ; < >

Citattecken kan användas för att inkludera metatecken i ord; se nedan.

Reserverade ord

Reserverade ord har en speciell betydelse i GRUB. Följande ord känns igen som reserverade när de är ociterade och antingen det första ordet i ett enkelt kommando eller det tredje ordet i ett `for`-kommando:

! [[ ]] { } case do done elif else esac fi for function if in menuentry select then time until while

Inte alla dessa reserverade ord har en användbar funktion ännu; vissa är reserverade för framtida expansion.

Citattecken

Citattecken används för att ta bort den speciella betydelsen av vissa tecken eller ord. De kan användas för att behandla metatecken som en del av ett ord, för att förhindra att reserverade ord känns igen som sådana och för att förhindra variabelutvidgning.

Det finns tre mekanismer för citattecken: flykttecken, enkla citattecken och dubbla citattecken.

Ett icke-citerat backslash (\) är ett flykttecken. Det bevarar det bokstavliga värdet av det efterföljande tecknet, med undantag för radbrytning.

Att omge tecken med enkla citattecken bevarar det bokstavliga värdet av varje tecken inom citattecknen. Ett enkelt citattecken får inte förekomma mellan enkla citattecken, även om det föregås av ett backslash.

Att omge tecken med dubbla citattecken bevarar det bokstavliga värdet av alla tecken inom citattecknen, med undantag för ‘$’ och ‘\’. Tecknet ‘$’ behåller sin speciella betydelse inom dubbla citattecken. Backslash behåller sin speciella betydelse endast när det följs av ett av följande tecken: ‘$’, ‘"’, ‘\’ eller radbrytning. Ett backslash-radbrytningspar behandlas som en fortsättning på raden (det vill säga det tas bort från indataströmmen och ignoreras effektivt). Ett dubbelt citattecken kan citeras inom dubbla citattecken genom att föregås av ett backslash.

Variabelutvidgning

Tecknet ‘$’ introducerar variabelutvidgning. Variabelnamnet som ska utvidgas kan omges av klammerparenteser, vilket är valfritt men tjänar till att skydda variabeln från tecken som omedelbart följer den och som kan tolkas som en del av namnet.

Normala variabelnamn börjar med ett alfabetiskt tecken, följt av noll eller fler alfanumeriska tecken. Dessa namn hänvisar till poster i GRUB-miljön (se Miljö).

Positionella variabelnamn består av en eller flera siffror. De representerar parametrar som skickas till funktionsanrop, där ‘$1’ representerar den första parametern, och så vidare.

Det speciella variabelnamnet ‘?’ utvidgas till avslutningsstatusen för det senast körda kommandot. När positionella variabelnamn är aktiva definieras andra speciella variabelnamn ‘@’, ‘*’ och ‘#’, och de utvidgas till alla positionella parametrar med nödvändiga citattecken, positionella parametrar utan några citattecken och antal positionella parametrar respektive.

Kommentarer

Ett ord som börjar med ‘#’ gör att det ordet och alla återstående tecken på den raden ignoreras.

Enkla kommandon

Ett enkelt kommando är en sekvens av ord separerade av mellanslag eller tabb och avslutade med ett semikolon eller en radbrytning. Det första ordet specificerar kommandot som ska köras. De återstående orden skickas som argument till det anropade kommandot.

Returneringsvärdet för ett enkelt kommando är dess avslutningsstatus. Om det reserverade ordet `!` föregår kommandot är returneringsvärdet istället den logiska negationen av kommandots avslutningsstatus.

Sammansatta kommandon

Ett sammansatt kommando är något av följande:

  • `for name in word …; do list; done`
    • Listan över ord efter `in` utvidgas och genererar en lista över objekt. Variabeln `name` sätts till varje element i denna lista i tur och ordning, och `list` körs varje gång. Returneringsvärdet är avslutningsstatusen för det sista kommandot som körs. Om utvidgningen av objekten efter `in` resulterar i en tom lista, körs inga kommandon, och avslutningsstatusen är 0.
  • `if list; then list; [elif list; then list;] … [else list;] fi`
    • Kommandot `if list` körs, där `list` är en serie enkla kommandon separerade med ett ";". Om avslutningsstatusen för det sista kommandot är noll, körs `then list`. Annars körs varje `elif list` i tur och ordning, och om avslutningsstatusen för det sista kommandot är noll, körs den motsvarande `then list` och kommandot avslutas. Annars körs `else list`, om den finns. Avslutningsstatusen är avslutningsstatusen för det sista kommandot som körs, eller noll om ingen villkor testade positivt.
  • `while cond; do list; done`
  • `until cond; do list; done`
    • Kommandot `while` kör kontinuerligt `do list` så länge som det sista kommandot i `cond` returnerar en avslutningsstatus på noll, där `cond` är en lista över enkla kommandon separerade med ett ";". Kommandot `until` är identiskt med kommandot `while`, förutom att testet är negerat; `do list` körs så länge det sista kommandot i `cond` returnerar en icke-noll avslutningsstatus. Avslutningsstatusen för kommandona `while` och `until` är avslutningsstatusen för det sista kommandot i `do list` som körs, eller noll om inget kördes.
  • `function name { command; … }`
    • Detta definierar en funktion med namnet `name`. Funktionens kropp är listan över kommandon inom klammerparenteser, där varje kommando måste avslutas med ett semikolon eller en radbrytning. Denna lista över kommandon kommer att köras när namnet anges som namnet på ett enkelt kommando. Funktionsdefinitioner påverkar inte avslutningsstatusen i `$?`. När de körs är avslutningsstatusen för en funktion avslutningsstatusen för det sista kommandot som körs i kroppens funktion.
  • `menuentry title [--class=class …] [--users=users] [--unrestricted] [--hotkey=key] [--id=id] { command; … }`

Inbyggda kommandon

Några inbyggda kommandon tillhandahålls också av GRUB-skript för att hjälpa skriptförfattare att utföra handlingar som annars inte är möjliga. Dessa inkluderar till exempel kommandon för att hoppa ur en loop utan att fullständigt slutföra den, och liknande.

  • `break [n]`
    • Avbryt från en `for`, `while` eller `until`-loop. Om `n` specificeras, avbryt `n` nivåer. `n` måste vara större än eller lika med 1. Om `n` är större än antalet omgivande loopar, avbryts alla omgivande loopar. Returneringsvärdet är 0 om inte `n` är mindre än eller lika med 1.
  • `continue [n]`
    • Återuppta nästa iteration av den omgivande `for`, `while` eller `until`-loopen. Om `n` specificeras, återuppta på den `n`:e omgivande loopen. `n` måste vara större än eller lika med 1. Om `n` är större än antalet omgivande loopar, återupptas den sista omgivande loopen (den översta loopen). Returneringsvärdet är 0 om inte `n` är mindre än eller lika med 1.
  • `return [n]`
    • Orsakar att en funktion avslutas med det returneringsvärde som specificeras av `n`. Om `n` utelämnas är returneringsstatusen det för det senaste kommandot som kördes i funktionskroppen. Om det används utanför en funktion är returneringsstatusen falsk.
  • `setparams [arg] …`
    • Ersätter de positionella parametrarna från och med `$1` med argumenten till `setparams`.
  • `shift [n]`
    • De positionella parametrarna från `n+1` och framåt döps om till `$1`, och så vidare. Parametrarna som representeras av siffrorna `$#` ned till `$#-n+1` tas bort. `n` måste vara ett icke-negativt tal som är mindre än eller lika med `$#`. Om `n` är 0, ändras inga parametrar. Om `n` inte anges antas det vara 1. Om `n` är större än `$#`, ändras inte de positionella parametrarna. Returneringsstatusen är större än noll om `n` är större än `$#` eller mindre än noll; annars är den 0.


Sidslut

Orginalhemsidan på Engelska :https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html#Simple-configuration

GNU GRUB Manual


Det här är en maskinöversättning av GNU-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp Stockholm som har sponsrat Linux.se med webserver.