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