|
| 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
| |
|
|