Як і будь-яка інша проста команда, [ ... ]
або 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
хоч прийнятий Башем як аргумент не 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, ви не хочете її затінювати.