Daugiau
Kaip patikrinti, ar komanda pavyko?
Ar yra koks nors būdas patikrinti, ar vykdant komandą įvyko klaida?
Pavyzdys :
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
}
Aš jau bandžiau tai padaryti, bet atrodo, kad tai neveikia. Aš nežinau, kaip tai padaryti.
242
3
Grąžinama reikšmė saugoma
$?
. 0 reiškia sėkmę, kitos - klaidą.Kaip ir bet kurią kitą tekstinę reikšmę, ją galite saugoti kintamajame, kad galėtumėte palyginti ateityje:
Apie galimus palyginimo operatorius žr.
man test
.Jei jums reikia žinoti tik tai, ar komanda pavyko, ar ne, nesivarginkite testuoti
$?
, tiesiog testuokite komandą tiesiogiai. Pvz:O išvesties priskyrimas kintamajam nekeičia grąžinamos reikšmės (na, nebent ji elgiasi kitaip, kai stdout nėra terminalas, žinoma).
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals išsamiau paaiškina
if
.$? turėtų būti ankstesnės komandos išėjimo būsena, kuri turėtų būti lygi nuliui, jei klaidos nėra.
Taigi, pvz;
daugeliu atvejų paprasčiau naudoti && konstrukciją komandų, kurios turi priklausyti viena nuo kitos, grandinei. Taigi
cd /nonexistant && echo success!
nesukeltų sėkmės, nes komanda nutrūksta prieš &&. Iš to išplaukia ||, kaicd /nonexistant || echo fail
*būtų echo fail, nes cd nepavyko. (tai tampa naudinga, jei naudojate ką nors panašaus į ||exit, kuris užbaigs scenarijų, jei ankstesnė komanda nepavyko).