Difference between revisions of "Bash scripts"

From Teknologisk videncenter
Jump to: navigation, search
m (while)
m (while)
Line 54: Line 54:
 
= Loops =
 
= Loops =
 
Der er flere foskellige måder at lave loops på i scripts. Hvilken metode der skal anvendes i hvilket tilfælde er baseret på erfaring.  
 
Der er flere foskellige måder at lave loops på i scripts. Hvilken metode der skal anvendes i hvilket tilfælde er baseret på erfaring.  
 +
For at forstå ''loops'' er det vigtigt at forstå en process ''exit'' status. En process returnerer en værdi til bash der beskriver hvordan process forløb.
 +
 +
I eksemplet herunder kan det ses at kommandoen ''ls -l script1'' går godt fordi filen ''script1'' eksisterer. Variablen '''$?''' indeholder ''exit'' status fra den sidste process der afsluttede. Denne indeholder her '''0''' som betyder det gik godt.
 +
<source lang=cli>
 +
[heth@mars ~/bin]$ <input>ls -l script1</input>
 +
-rwxr-xr-x  1 heth  heth  88 Aug 24 11:43 script1
 +
[heth@mars ~/bin]$ <input>echo $?</input>
 +
<notice>0</notice>
 +
</source>
 +
 +
I eksemplet herunder kan det ses at kommandoen ''ls -l script190'' fejler fordi filen ''script190'' ikke eksisterer. Variablen '''$?''' indeholder ''exit'' status fra den sidste process der afsluttede. Denne indeholder her '''1''' som betyder at kommandoen fejlede .
 +
<source lang=cli>
 +
[heth@mars ~/bin]$ <input>ls -l script190</input>
 +
ls: script190: No such file or directory
 +
[heth@mars ~/bin]$ <input>echo $?</input>
 +
<notice>1</notice>
 +
</source>
 
== while ==
 
== while ==
 
'''SYNTAX:'''   
 
'''SYNTAX:'''   
Line 62: Line 79:
 
----
 
----
 
'''FORKLARING:'''
 
'''FORKLARING:'''
::while udfører det der står mellem '''do''' og '''done'''  
+
::while udfører kommandoerne der står mellem '''do''' og '''done''' medens kommandoen efter while går godt - altså har en ''exit'' status på '''0'''. Hvis ''exit'' status er forskellig fra '''0''' udføres kommandoerne mellem '''do''' og '''done''' ikke og '''while''' kommandoen afsluttes helt.
 +
 
 +
----
 +
'''EKSEMPEL:'''
 +
:: I eksemplet herunder anvendes kommandoen [[test]] for at teste om variablen ''COUNT'' er mindre end eller lig med '''-le'' (Lesser than or Equal to).
 +
::Bash scriptet herunder skriver 100 linier på skærmen hvor '''COUNT''' tælles op fra 1 til 100.
 +
<source lang=cli>
 +
#!/usr/bin/bash
 +
 
 +
COUNT=1
 +
 
 +
while test $COUNT -le 100
 +
do
 +
  echo "Count har talt til $COUNT"
 +
  let COUNT=COUNT+1
 +
done
 +
</source>
  
 
    
 
    

Revision as of 13:02, 24 August 2009

Denne artikel er en del af den samlede dokumentation af bash.

Mit første bash script

Hvor skal script-filen placeres

Det er vigtigt at scriptet ligger i et bibliotek der er med i søgning i variablen $PATH

[heth@mars ~]$ <input>who am i</input>
<notice>heth</notice>             ttyp2    Aug 24 07:51 (192.168.22.136)

[heth@mars ~]$ <input>echo $PATH</input>
/sbin:/bin:/usr/sbin:/usr/bin:<notice>/home/heth/bin</notice>

Biblioteket hvor brugeren heth skal ligge sin scripts hedder /home/heth/bin. Opret dette bibliotek hvis det ikke eksisterer og skift til dette bibliotek.

[heth@mars ~]$ <input>mkdir /home/heth/bin</input>
[heth@mars ~]$ <input>cd /home/heth/bin</input>

Oprettelse af scriptet

Før vi opretter scriptet er det nødvendigt at vide hvor bash er installeret på maskinen. Bash programmet skal alle andre programmer er normalt placeret i et bin eller sbin bibliotek. På min maskine er den installeret i /usr/bin/bash som vist nedenfor.

[heth@mars ~/bin]$ <input>whereis bash</input>
bash: <notice>/usr/bin/bash</notice> /usr/local/man/man1/bash.1.gz /usr/ports/shells/bash

Opret scriptet med din ynglingseditor. pico,nano,edit,emacs eller vi. vi editoren findes på alle versioner af Linux og Unix, og er derfor en god editor at kende. Den kan dog drille lidt, så vælg pico hvis du er i tvivl - og den er installeret på din Linux/Unix boks.

filen oprettes med

[heth@mars ~/bin]$ <input>vi script1</input>

Indtast nedenstående bash script

#!/usr/bin/bash

echo -en "Hvad er dit navn: "
read NAVN
echo -e "Dit navn er $NAVN"

Afvikling af shell scriptet

For at afvikle shell scriptet skal bash vide at det er en udførbar fil. Altså et program der kan blive til en process.

[heth@mars ~/bin]$ <input>ls -l script1</input>
<notice>-rw-r--r--</notice>  1 heth  heth  99 Aug 24 10:41 script1
[heth@mars ~/bin]$ <input>chmod +x script1</input>
[heth@mars ~/bin]$ <input>ls -l script1</input>
<notice>-rwxr-xr-x</notice>  1 heth  heth  99 Aug 24 10:41 script1

nu er scriptet klar til at køre

[heth@mars ~/bin]$ <input>script1</input>
Hvad er dit navn: <input>Mickey Mouse</input>
Dit navn er Mickey Mouse

Loops

Der er flere foskellige måder at lave loops på i scripts. Hvilken metode der skal anvendes i hvilket tilfælde er baseret på erfaring. For at forstå loops er det vigtigt at forstå en process exit status. En process returnerer en værdi til bash der beskriver hvordan process forløb.

I eksemplet herunder kan det ses at kommandoen ls -l script1 går godt fordi filen script1 eksisterer. Variablen $? indeholder exit status fra den sidste process der afsluttede. Denne indeholder her 0 som betyder det gik godt.

[heth@mars ~/bin]$ <input>ls -l script1</input>
-rwxr-xr-x  1 heth  heth  88 Aug 24 11:43 script1
[heth@mars ~/bin]$ <input>echo $?</input>
<notice>0</notice>

I eksemplet herunder kan det ses at kommandoen ls -l script190 fejler fordi filen script190 ikke eksisterer. Variablen $? indeholder exit status fra den sidste process der afsluttede. Denne indeholder her 1 som betyder at kommandoen fejlede .

[heth@mars ~/bin]$ <input>ls -l script190</input>
ls: script190: No such file or directory
[heth@mars ~/bin]$ <input>echo $?</input>
<notice>1</notice>

while

SYNTAX:

while COMMAND
do
COMMANDS
done

FORKLARING:

while udfører kommandoerne der står mellem do og done medens kommandoen efter while går godt - altså har en exit status på 0. Hvis exit status er forskellig fra 0 udføres kommandoerne mellem do og done ikke og while kommandoen afsluttes helt.

EKSEMPEL:

I eksemplet herunder anvendes kommandoen test for at teste om variablen COUNT er mindre end eller lig med '-le (Lesser than or Equal to).
Bash scriptet herunder skriver 100 linier på skærmen hvor COUNT tælles op fra 1 til 100.
#!/usr/bin/bash

COUNT=1

while test $COUNT -le 100
do
  echo "Count har talt til $COUNT"
  let COUNT=COUNT+1
done