Navigationskarta Insitutitionen för Datavetenskap Umeå Universitet

Skriptprogrammering

Vad är ett shellskript?

Ett shellskript är en textfil som innehåller Unix-kommandon. Man skapar skriptet med sin favoriteditor (Emacs, vi eller i nödfall pico). Ett extremt enkelt shellskript kan se ut så här:

#!/usr/bin/sh
ls

Den första raden måste alltid finnas med. Den talar om vilket shell som ska tolka skriptet (/usr/sh och /usr/bin/sh är samma sak). Sedan skriver man de kommandon som utgör skriptet.

Om filen sune har ovanstående innehåll kan du köra skriptet genom att skriva sune vid prompten. Först måste du dock tala om att sune är en körbar fil, och det gör du med chmod:

chmod 755 sune

Läs gärna man-sidan om chmod, det är ett bra kommando att kunna.

Variabler och substitution

Det går att göra mycket mer med shellskript än att bara rada upp enkla kommandon. Exempelvis finns if-satser, repetition (for, while) och mycket annat, ungefär som i ett riktigt programmeringsspråk.

Variabler i shellskript hanteras på ett lite eget sätt. Enkelt uttryckt kan man säga att när du vill referera till variabelns värde måste du ha ett dollartecken före variabelnamnet, men när du refererar till själva variabeln ska det inte vara något dollartecken:

kalle="Det är roligt att skriva shellskript."

Detta uttryck refererar till själva variabeln kalle, och ska alltså inte ha något dollartecken, men om man vill skriva ut värdet på skärmen måste man skriva så här:

echo $kalle

Shellet kommer då att ersätta (substituera) $kalle med värdet hos variabeln kalle. Substitution är en kraftfull mekanism, läs man-sidan för sh och försök förstå hur det fungerar. Man kan styra substitutionen bl.a med olika sorters citationstecken:

echo "$kalle" - substitution sker
echo '$kalle' - ingen substitution
echo `ls` - ls ersätts med utdata från kommandot ls. Prova!

Speciella variabler

Det finns en hel del speciella variabler. $0, $1, $2... ser man ofta. De refererar till argumenten till skriptfilen. Om skriptet sune anropas med kommandot sune arg1 arg2 kommer $0 att ha värdet sune, $1 arg1 och $2 arg2. Variabeln $# talar om hur många argument som finns, och kommandot shift flyttar efter dem ett steg ($2 får det värde som $3 hade förut osv).

Älska man-sidorna

En viktig del av den här kursen är att lära sig hitta information om systemet. Använd man-sidorna, allting står där. Observera att man-sidan för sh innehåller information om alla interna kommandon. For, while och liknande har inga egna man-sidor.

Kommandot test hanterar villkorssatser i shellskript, så information om hur man testar olika saker (t.ex om en sträng har ett värde eller inte) hittar du i man-sidan för test.

Ett varningens ord

Ett misstag som många gör är att döpa sitt shellskript till test Gör inte det! Det finns nämligen ett program i Unix som heter just test, som kommer att köras istället för ditt skript med mycket förvirrande resultat. Om du absolut vill att skriptet ska heta test måste du starta det med kommandot ./test.

[an error occurred while processing this directive]