Az a lényeg, ami szerintem nem esett le neked, hogy a parancs visszatér az exit kóddal, majd ennek $? értékét vizsgálod egy test segítségével, csak az a kérdés, minek. A test eredménye épp egy exit kód lesz, amelyre az if vagy végrehajtja, ami a then után van, vagy nem.
Akkor már nem egyszerűbb eleve az eredeti visszatérési értékkel megkínálni az if-et?
Mutatok példát arra, hogy vizsgáljuk, létezik-e egy alkönyvtár, s ha igen, akkor menjünk bele:
if [ -d "$directory" ]; then
cd "$directory"
valami parancs
cd -
fi
Ugyanakkor ezt így is lehet, és szerintem szebb:
if cd "$directory" &>/dev/null; then
valami parancs
cd -
fi
A második esetben, ha az if-ben lévő cd sikeresen végrehajtódik, akkor a then utáni valami parancsot megcsinálja, de már bement a $directory-ba, hiszen éppen attól volt sikeres a cd.
Ha viszont nincs az illető alkönyvtár, akkor a cd hibakódot ad vissza, s így az if utáni then ág nem hajtódik végre, s az alkönyvtárba sem mentünk, mert az nem létezik, vagy nincs rá jogunk. A második megoldás ezért is jobb: az elsőben azt is vizsgálni kellene - amit most nem tettem meg -, hogy van-e jogosultságom arra, hogy az adott alkönyvtárba menjek.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE