/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Bash programmering - check på exit-code ?
Fra : Brian Ipsen


Dato : 06-01-02 14:55

Hej!

Mit nysgerrige "jeg" (som har arbejdet mest i MS-batch scripting
indtil videre) har et hurtigt spørgsmål:

Hvis man vil lave et script, som kan håndtere fejl (baseret på hvad
kaldte kommandoer returnerer) - hvad gør man så ... Jeg tænker lidt på
de muligheder, som man i dos har med:

IF ERRORLEVEL <bla bla> <kommando eller goto label>

Kan noget lignende ikke laves i et bash-script ?

/Brian

 
 
Martin Moller Peders~ (06-01-2002)
Kommentar
Fra : Martin Moller Peders~


Dato : 06-01-02 15:09

In <allg3us1ledih9m1ik15pq5bmk29f2mdg1@news.inet.tele.dk> Brian Ipsen <Spammers@blow.me> writes:

>Hej!

> Mit nysgerrige "jeg" (som har arbejdet mest i MS-batch scripting
>indtil videre) har et hurtigt spørgsmål:

>Hvis man vil lave et script, som kan håndtere fejl (baseret på hvad
>kaldte kommandoer returnerer) - hvad gør man så ... Jeg tænker lidt på
>de muligheder, som man i dos har med:

>IF ERRORLEVEL <bla bla> <kommando eller goto label>

>Kan noget lignende ikke laves i et bash-script ?

Ja, da, det hedder $?
f.x.
lynx --dump www.daimi.au.dk > daimi.txt
if [ $? = 0 ] ; then echo det gik godt ; else echo det gik skidt

I bash kan man meget meget mere end .bat i ms-dos.

proev at skrive:
man bash
eller
info bash
eller
se http://www.gnu.org/manual/bash-2.02/bashref.html

Mvh
Martin


Claus Rasmussen (06-01-2002)
Kommentar
Fra : Claus Rasmussen


Dato : 06-01-02 18:26

Brian Ipsen wrote:

> Hvis man vil lave et script, som kan håndtere fejl (baseret på hvad
> kaldte kommandoer returnerer) - hvad gør man så ... Jeg tænker lidt på
> de muligheder, som man i dos har med:

[føj]

> Kan noget lignende ikke laves i et bash-script ?

Normalt bruger man || operatoren eller if-sætningen. F.eks:

ls --gryf || echo "Her var en fejl"

eller
if ls --gryf
then echo "Her var en fejl"
fi

Hvis du prøver det, vil du opdage, at du også får fejlmeddelelsen
fra ls kommandoen med ud på skærmen. Det vil du sikkert gerne
undgå, når du selv tjekker på fejlen. Derfor kombinerer man det
ofte med en omdirrigering af stderr:

ls --gryf 2>/dev/null || echo "Her var en fejl"

eller
if ls --gryf 2>/dev/null
then echo "Her var en fejl"
fi

Du skal være opmærksom på, at pipelines ikke giver det forventede
resultat:

ls --gryf 2>/dev/null | cat || echo "Bliver aldrig udført"

Istedet bruger du så variablen PIPESTATUS

-Claus


Michael Hjorth (06-01-2002)
Kommentar
Fra : Michael Hjorth


Dato : 06-01-02 21:39

Claus Rasmussen wrote:
>
> Brian Ipsen wrote:
>
> > Hvis man vil lave et script, som kan håndtere fejl (baseret på hvad
> > kaldte kommandoer returnerer) - hvad gør man så ... Jeg tænker lidt på
> > de muligheder, som man i dos har med:
>
> [føj]
>
> > Kan noget lignende ikke laves i et bash-script ?
>

Test på $?, som en række andre også har foreslået.

> Normalt bruger man || operatoren eller if-sætningen. F.eks:
>
> ls --gryf || echo "Her var en fejl"
>
> eller
> if ls --gryf
> then echo "Her var en fejl"
> fi
>

Det er også en mulighed.
Pas dog på med || operatoren, da $? altid indeholder returkoden fra den
første kommando.
Det er f.eks. en meget dårlig ide at bruge den sammen med test
kommandoen til betinget udførelse af noget kode som man også gerne vil
teste om er gået godt:

[ "$minvar" -eq 3 ] || echo "minvar var ikke 3"

så får du ALTID returkoden fra test-kommandoen i $? og det behøver jo
ikke være en fejl.

Michael.

Klaus Alexander Seis~ (06-01-2002)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 06-01-02 18:54

Brian Ipsen skrev:

> Hvis man vil lave et script, som kan håndtere fejl (baseret på
> hvad kaldte kommandoer returnerer) - hvad gør man så

Returværdien lagres i variablen ${?}, så man kan lave noget i
retning af

#v+
: her forudsættes kommandoen kørt

case ${?} in
0) echo alt okay ;;
1) echo alt er ikke okay ;;
*) echo alt andet end 0 og 1 ;;
esac

#v-

Se bash(1) under SHELL GRAMMAR :: Compound Commands, samt under
PARAMETERS :: Special Parameters.

I det hele taget står der mange gode ting i bash(1), så det er ikke
en dårlig idé at læse det hele igennem. Og pakken med source til
bash indeholder tonsvis af eksempler på shellscripts, så der er
masser at stj^H^H^Hlade sig inspirere af.


// Klaus

--
><>    vandag, môre, altyd saam

Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408881
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste