Viac na
Kontrola počtu argumentov odovzdaných skriptu Bash
Chcel by som, aby môj skript Bash vypísal chybovú správu, ak nie je splnený požadovaný počet argumentov.
Vyskúšal som nasledujúci kód:
#!/bin/bash
echo Script name: $0
echo $# arguments
if [$# -ne 1];
then echo "illegal number of parameters"
fi
Z nejakého neznámeho dôvodu som dostal nasledujúcu chybu:
test: line 4: [2: command not found
Čo robím zle?
659
3
Tak ako každý iný jednoduchý príkaz, aj
[ ... ]
alebotest
vyžaduje medzi svojimi argumentmi medzery.Alebo
Návrhy
V jazyku Bash radšej používajte
[[ ]]
, pretože v ňom nedochádza k deleniu slov a expanzii názvov ciest na premenné, ktoré nemusia byť citované, pokiaľ nie sú súčasťou výrazu.Má aj niektoré ďalšie funkcie, ako je zoskupovanie podmienok bez úvodzoviek, porovnávanie vzorov (rozšírené porovnávanie vzorov pomocou
extglob
) a porovnávanie regexov.Nasledujúci príklad kontroluje, či sú argumenty platné. Povoľuje jeden alebo dva argumenty.
Pre čisto aritmetické výrazy môže byť pre niektoré stále lepšie použitie
(( ))
, ale stále sú možné v[[ ]]
s jeho aritmetickými operátormi ako-eq
,-ne
,-lt
,-le
,-gt
, alebo-ge
umiestnením výrazu ako jediného reťazcového argumentu:To by malo byť užitočné, ak by ste to potrebovali kombinovať aj s inými funkciami
[[ ]]
.Ukončenie skriptu
Je'tiež logické, aby sa skript ukončil, keď sú mu odovzdané neplatné parametre. To už v komentároch navrhol ekangas, ale niekto túto odpoveď upravil tak, aby mala ako vrátenú hodnotu
-1
, takže by som to mohol urobiť aj ja.-1
síce Bash akceptuje ako argument preexit
, ale nie je explicitne zdokumentovaný a nie je správne ho používať ako bežný návrh.64
je tiež najformálnejšia hodnota, pretože je'definovaná vsysexits.h
pomocou#define EX_USAGE 64 /* chyba použitia príkazového riadku */
. Väčšina nástrojov, ako napríkladls
, tiež vracia2
pri neplatných argumentoch. Aj ja som kedysi vo svojich skriptách vracal2
, ale v poslednom čase ma to už veľmi nezaujímalo a jednoducho som pri všetkých chybách používal1
. Ale dajme sem len2
, pretože je to najbežnejšie a pravdepodobne nie je špecifické pre operačný systém.Referencie
Ak pracujete s číslami, je vhodné použiť aritmetické výrazy.
Na []: !=, =, == ... sú reťazcové porovnávacie operátory a -eq, -gt ... sú aritmetické binárne operátory.
Použil by som:
Alebo: