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!
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).
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 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
.