Podobnie jak każde inne proste polecenie [ ... ]lub testwymaga 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 -gepoprzez 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ą -1jako wartość zwróconą, więc równie dobrze mogę to zrobić poprawnie.
-1chociaż zaakceptowany przez Bash jako argument, exitnie jest wyraźnie udokumentowany i nie może być stosowany jako powszechna sugestia. 64Jest również najbardziej formalny, ponieważ wartość jest zdefiniowana w sysexits.hz #define EX_USAGE 64 /* command line usage error */. Większość narzędzi takich jak lszwraca również 2nieprawidłowe argumenty. Zwykłem też wracać 2w swoich skryptach, ale ostatnio tak naprawdę mnie to nie obchodziło i po prostu używałem 1wszystkich błędów. Ale po prostu umieśćmy 2tutaj, 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ć.