Következő Előző Tartalomjegyzék Kilépés

11. Vegyes tanácsok

11.1. Könyvtárnév végén / jel

Olyan parancsoknál, ahol az utolsó argumentum lehet fájl vagy könyvtár is (cp, mv, install, ln -s), ha könyvtár az utolsó argumentum, akkor tegyünk a végére / jelet. Például

ne ezt írjuk: install -m 755 foobar ${UB_INSTALLDIR}/usr/bin

hanem ezt: install -m 755 foobar ${UB_INSTALLDIR}/usr/bin/

Mire jó ez?

Egyrészt a / jel sugallja, hogy "ide bele", egyértelművé teszi a kód olvasója számára, hogy az egy könyvtár neve, és nem egy fájlé.

Másrészt amennyiben az említett könyvtár még nem létezik, az esetben a program a hibaüzenettel leállást fogja választani, nem pedig szép csöndes hibás működést (a foobar progi bemásolását az $UB_INSTALLDIR/usr könyvtárba bin néven).

Olyan parancsokra, amelyek kötelezően könyvtárnévvel foglalkoznak (cd, mkdir, rmdir) ez a tanács nem vonatkozik, bár ott sem árthat a / jel.

11.2. * wildcard

Kerüljük a * wildcardot, ha csak lehet. Gáz van vele, ha épp nincs egyetlen fájl sem, valamint nem illeszkedik a . kezdetű fájlokra. Ha a foobar könyvtáron belüli minden fájlt át akarunk másolni, akkor ne azt írjuk, hogy

cp -a foobar/* ide/

hanem azt, hogy

cp -a foobar/. ide/

Jó kis trükk, bejön :-)

11.3. #!/bin/sh -eux

A compile és install szkripteket kezdjük így.

-e: Hiba esetén azonnal kilép.

-u: Hibát jelez, ha nem létező változónévre hivatkozunk. Elgépelések ellen nagyon jó. Ha nem tudjuk, hogy adott változó be van-e állítva, használhatjuk a ${VALAMI:-} alakot.

-x: kiírja a képernyőre, hogy mit csinál.

11.4. idézőjelek

Használjunk idézőjeleket minél gyakrabban a bash szkriptekben!

11.5. --

Ha egy parancs első nem-opció argumentuma valami változó, akkor használjuk a -- kapcsolót a további argumentum-értelmezés letiltására. Például:

cp -a -- "$mit" "$hova"

11.6. printf

echo-val nem lehet 100%-os biztonsággal kiírni egy változó értékét, mert ha a változó értéke "-n" vagy "-e" vagy ilyesmi, azt az echo kapcsolóként értelmezi, és sajnos nem ismeri a "--" kapcsolót. Ha atombiztosan akarjuk egy változó értékét kiírni, használjuk a printf beépített shell parancsot:

printf '%s\n' "$valtozo"

11.7. Változó tesztelése

bash-ben nagyon nehézkes azt tesztelni, hogy egy környezeti változó létezik-e egyáltalán. A "${valtozo+boci}" szerkezetet kell használni, ennek értéke boci lesz, ha a változó létezik (akár üres), és üres érték, ha a változó nem létezik.

Emiatt általában megelégszünk azzal, hogy azt teszteljük, adott változó rendelkezik-e nemüres értékkel. Ezt így tehetjük meg:

[ -n "$valtozo" ]

vagy

[ "$valtozo" = "" ]

vagy

[ "x$valtozo" = "x" ]

Mindegyik esetben fontos az idézőjel a $valtozo körül! A harmadik megoldásban az a szép, hogy nyilván akkor is helyesen működik, ha a változó értéke mínusz jellel kezdődik. De a másik kettő is jó. Érdemes a legelső, "-n" alakra rászokni olvashatósága miatt.

Elvileg helyes az is, hogy

[ "$valtozo" ]

de ennek kerüljük a használatát, mert egyrészt undorító ronda (bocsi, ez szubjektív vélemény volt), másrészt a "-n"-es megközelítésnél is kevésbé triviális, hogy minden esetben jól működik, harmadrészt, ez a legfontosabb érv: ezt a konstrukciót nem lehet "-o" illetve "-a" kapcsolókkal vagy- és és-kapcsolatba fűzni.

11.8. find

A find első argumentuma mindig / jelre végződjön (kivéve ha "."). Ez arra jó, hogy ha ez az argumentum egy szimlink egy könyvtárra, akkor belemászik a find, és nem adja fel.


Következő Előző Tartalomjegyzék Kilépés