Finnes det noen måte å sjekke om det er en feil i utførelsen av en kommando?
Eksempel:
test1=`sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase" $search`
valid $test1
function valid () {
if $test -eq 1; then
echo "OK"
else echo "ERROR"
fi
}
Jeg har allerede prøvd å gjøre det, men det ser ut til at det ikke fungerer. Jeg vet ikke hvordan jeg gjør det.
Returverdien lagres i $?
. 0 indikerer suksess, andre indikerer feil.
some_command
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
Som enhver annen tekstverdi kan du lagre den i en variabel for fremtidig sammenligning:
some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
echo "Return code was not zero but $retval"
fi
For mulige sammenligningsoperatorer, se man test
.
Hvis du bare trenger å vite om kommandoen lyktes eller mislyktes, trenger du ikke å teste $?
, bare test kommandoen direkte. F.eks:
if some_command; then
printf 'some_command succeeded\n'
else
printf 'some_command failed\n'
fi
Og å tilordne utdata til en variabel endrer ikke returverdien (vel, med mindre den oppfører seg annerledes når stdout ikke er en terminal selvfølgelig).
if output=$(some_command); then
printf 'some_command succeded, the output was «%s»\n' "$output"
fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals forklarer if
i mer detalj.
$? skal inneholde avslutningsstatusen for den forrige kommandoen, som skal være null for ingen feil.
Så noe sånt som
cd /nonexistant
if [ $? -ne 0 ]
then
echo failed
else
echo success!
fi
for de fleste tilfeller, det's lettere å bruke && konstruksjon for å kjede kommandoer som trenger å avhenge av hverandre. Så cd /nonexistent && ekko suksess!
ville ikke ekko suksess fordi kommandoen bryter før &&. Følgen av dette er ||, der cd /nonexistent || echo fail
ville echo fail fordi cd mislyktes. (dette blir nyttig hvis du bruker noe som ||exit, som vil avslutte skriptet hvis den forrige kommandoen mislyktes).