Как и любая другая простая команда, [ ... ]
или test
требует пробелов между ее аргументами.
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
Или
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
Предложения
В Bash предпочтительнее использовать [[ ]]
вместо этого, так как он не выполняет разбиение слов и расширение пути к своим переменным, в кавычках нет необходимости, если они не являются частью выражения.
[[ $# -ne 1 ]]
Он также имеет некоторые другие функции, такие как группировка условий без кавычек, сопоставление с образцом (расширенное сопоставление с шаблоном extglob
) и сопоставление с регулярным выражением.
В следующем примере проверяется, допустимы ли аргументы. Это позволяет один аргумент или два.
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
Для чистых арифметических выражений, с помощью (( ))
некоторых все еще может быть лучше, но они все еще возможны [[ ]]
с его арифметическими операторами нравятся -eq
, -ne
, -lt
, -le
, -gt
, или -ge
путь размещения выражения в виде одной строки аргумента:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
Это должно быть полезно, если вам нужно будет сочетать его с другими функциями [[ ]]
.
Выход из скрипта
Также логично заставить скрипт завершать работу, когда ему передаются недопустимые параметры. Это уже было предложено в комментариях по ekangas , но кто - то редактировал этот ответ , чтобы иметь его-1
в качестве возвращаемого значения, так что я мог бы также сделать это правильно.
-1
хотя принятый Bash в качестве аргумента, exit
явно не задокументирован и не может быть использован в качестве общего предложения. 64
также является наиболее формальным значением, так как оно определено в sysexits.h
с #define EX_USAGE 64 /* command line usage error */
. Большинство инструментов вроде ls
также возвращают 2
неверные аргументы. Я также использовал для возврата 2
в своих сценариях, но в последнее время я больше не заботился, а просто использовал 1
во всех ошибках. Но давайте просто разместим 2
здесь, поскольку это наиболее распространенный и, вероятно, не зависит от ОС.
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
Ссылки
test
. Это название стандартной команды Unix, вы бы не хотели ее скрывать.