Udgivet i

Linux shell script reference

Oversigt over Linux shell funktionalitet. Jeg bruger det som reference til scripts. Kommandoer er generelle og skulle virke de fleste steder. Der kan dog være mindre forskelle afhængigt af den valgte fortolker. Nogle af regnefunktionerne virker kun i Bash.

Tilstandstest

Alle test afgrænses af firkant paranteser [ and ], som her:

if [ true ]
then
  # gør noget her
fi

Brug af dobbelte firkant paranteser [[ and ]] virker med Bash, Zsh og Korn.

Uddybning http://mywiki.wooledge.org/BashFAQ/031

Dette er vigtigt: Sørg for mellemrum før og efter paranteserne.

Fil test

Test på filer:

-d file    Test om file er en mappe
-e file    Test om file findes
-f file    Test om file er en almindelig fil
-r file    Test om file kan læses
-w file    Test om file kan ændres
-x file    Test om file kan køres

Som eksempel kan – hvis du har en fil med navnet foo, kan du test om filen kan læses:

if [ -r foo ]
then
  # gør noget her
fi

Tekst test

s1          Test om s1 indholder tekst
s1 = s2     Test om s1 er identisk med s2
s1 != s2    Test om s1 er forskellig fra s2
-n s1       Test om s1 har en længde
-z s1       Test om s1 er tom

Eksempel til at teste om to variable er ens:

if [ $foo = $bar ]
then
  # gør noget her
fi

Denne test skriver SAND:

s1=

if [ -n $s1 ]
then
  echo "SAND"
else
  echo "FALSK"
fi

Denne test skriver FALSK:

s1=bar

if [ -z "$s1" ]
then
  echo "SAND"
else
  echo "FALSK"
fi

Ovenstående illustrerer også brugen af else sammen med if test.

Udregninger og tal test

n1 -eq n2    Test om n1 er identisk med n2
n1 -ne n2    Test om n1 er forskellig fra n2
n1 -lt n2    Test om n1 er mindre end n2
n1 -le n2    Test om n1 er mindre end eller lig med n2
n1 -gt n2    Test om n1 er større end n2
n1 -ge n2    Test om n1 er mindre end eller lig med n2

Et eksempel på en test der checker om tallene er ens:

if [ $n1 -eq $n2 ]
then
  # gør noget her
fi

Boolsk and/or/not

Boolske and/or/not operatorer der kan bruges:

-a    and
-o    or
!     not

Eksempel på andoperator:

if [ $num -gt 0 -a $num -lt 10 ]
then
  # gør noget her
fi

Gruppering af operatorer

Hvis det er nødvendigt at udføre flere test på en gang operatorer grupperes som det ses a nedenstående eksempel.

a=5
b=20

if test \( $a -gt 0 -a $a -lt 10 \) -o \( $b -gt 0 -a $b -lt 20 \)
then
   echo "SAND"
else
  echo "FALSK"
fi

Testen fil skrive “SAND”.

Linux Bourne shell if, then, else, else if (elif) syntax

En ting der varierer fra sprog til spog er if / then / else / else if / elseif udtrykket. I en Bourne shell, er “else if” en “elif”, så i en Bourne shell if then else if udtrykket ser ud som dette eksempel:

if [ -e 'foo' ]
then
  echo "hvis var sand"
elif [ -e 'bar' ]
then
  echo "eller hvis var sand"
else
  echo "helt frem til ellers"
fi

Bourne shell matematik

I Bourne shell bliver matematik/regning udført ved at bruge en expr udtryk som nedenstående:

sum=`expr $foo + $bar`
half=`expr $foo / 2`
times=`expr $foo \* 2`

Tæller

(( count++ ))

Der må ikke være mellem før eller efter lighedstegn i tildelingen af værdi til en varibel.

Ekstra

cmd1 && cmd2   Kør cmd1; hvis returværdi er nul (success), kør cmd2
cmd1 || cmd2   Kør cmd1; hvis returværdi er forskellig fra nul, kør cmd2
cmd1 & cmd2    Kør cmd1 også cmd2
(ls -1)        Kør kommando "ls -1" i en underskal