unexpected operator при запуске командного файла в интерпретаторе Unix
Только начал изучать создание командных процедур в Unix. Пытаюсь написать простой командный файл, содержащий цикл. Вот мой код (Он должен выводить на стандартный вывод слово Unix заданное при запуске число раз.)
n=$1
while test $n -gt 0
do
echo Unix
n=`expr $n - 1`
done
Создаю командный файл:
chmod +x unix_print
Вызываю:
/usr/home/files/unix_print
Получаю ошибку:
test: -gt: unexpected operator
Притом если я запускаю эти команды не из командного файла, то всё работает, как предполагается. Подскажите, пожалуйста, что я делаю не так.
Ответы - unexpected operator при запуске командного файла в интерпретаторе Unix / unexpected operator при запуске командного файла в интерпретаторе Unix


02.10.2018 02:22:27
Вводя n=$1
ты указываешь, чтобы переменной n
присвоилось значение первого позиционного параметра, но при вызове (/usr/home/files/unix_print
) ты не передаёшь этого параметра и соответственно в вызове утилиты test
он просто пропускается. и он превращается в test -gt 0
, что с её точки зрения является не корректным, о чём она и сообщает.
Правильный вызов выглядел бы, например, так (внимание на аргумент 3
):
/usr/home/files/unix_print 3
Прочая критика
- В отрывке приведённого кода отсутствует she-bang (
#!/bin/sh
), понимаю, что это, по всей видимости, упрощение для поста, но всё же это вызывает некоторое недоверие... - Вместо
expr
обычно используют встроенный в POSIX-совместимую оболочку оператор вычисления арифметического выражения ($(( ))
). - Как ты уже заметил, хорошей практикой является брать в кавычки всё, для чего не доказана необходимость обратного.