Podobnie jak każde inne proste polecenie [ ... ]
lub test
wymaga spacji między jego argumentami.
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
Lub
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
Propozycje
Będąc w Bash, wolisz używać [[ ]]
zamiast tego, ponieważ nie powoduje dzielenia słów i rozwijania nazw ścieżek zamiast zmiennych, że cytowanie może nie być konieczne, chyba że jest częścią wyrażenia.
[[ $# -ne 1 ]]
Posiada również inne funkcje, takie jak niecytowane grupowanie warunków, dopasowanie wzorca (rozszerzone dopasowanie wzorca z extglob
) i dopasowanie wyrażenia regularnego.
Poniższy przykład sprawdza, czy argumenty są poprawne. Pozwala na pojedynczy argument lub dwa.
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
Dla czystych wyrażeń arytmetycznych, przy użyciu (( ))
niektórych może być jeszcze lepiej, ale nadal są możliwe [[ ]]
z jego operatorów arytmetycznych podoba -eq
, -ne
, -lt
, -le
, -gt
, lub -ge
poprzez umieszczenie wyrażenia jako pojedynczy argument wyrażenie:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
To powinno być pomocne, jeśli musisz połączyć to z innymi funkcjami [[ ]]
.
Wyjście ze skryptu
Logiczne jest również zamknięcie skryptu, gdy zostaną do niego przekazane nieprawidłowe parametry. Zostało to już zasugerowane w komentarzach przez ekangas, ale ktoś edytował tę odpowiedź, aby otrzymać ją -1
jako wartość zwróconą, więc równie dobrze mogę to zrobić poprawnie.
-1
chociaż zaakceptowany przez Bash jako argument, exit
nie jest wyraźnie udokumentowany i nie może być stosowany jako powszechna sugestia. 64
Jest również najbardziej formalny, ponieważ wartość jest zdefiniowana w sysexits.h
z #define EX_USAGE 64 /* command line usage error */
. Większość narzędzi takich jak ls
zwraca również 2
nieprawidłowe argumenty. Zwykłem też wracać 2
w swoich skryptach, ale ostatnio tak naprawdę mnie to nie obchodziło i po prostu używałem 1
wszystkich błędów. Ale po prostu umieśćmy 2
tutaj, ponieważ jest to najczęściej i prawdopodobnie nie jest specyficzne dla systemu operacyjnego.
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
Bibliografia
test
. To jest nazwa standardowego polecenia Uniksa, nie chciałbyś go ukrywać.