Hvordan sjekke om en kommando lyktes?
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.
242
3
Returverdien lagres i
$?
. 0 indikerer suksess, andre indikerer feil.Som enhver annen tekstverdi kan du lagre den i en variabel for fremtidig sammenligning:
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: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).
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
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 ||, dercd /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).