У меня возникли проблемы с поиском ошибки синтаксиса в следующем скрипте.Передача аргумента в bash
Баш test.sh кошка
#!/bin/bash
if [ $1 = "cat" ]; then
echo "valid"
else
echo "invalid"
fi
У меня возникли проблемы с поиском ошибки синтаксиса в следующем скрипте.Передача аргумента в bash
Баш test.sh кошка
#!/bin/bash
if [ $1 = "cat" ]; then
echo "valid"
else
echo "invalid"
fi
Если вы не давая аргументы, $1
будет вычисляться в пустое пространство, и вы, вероятно, видя line 2: [: =: unary operator expected
. Чтобы исправить, добавить кавычки $1
:
#!/bin/bash
if [ "$1" = "cat" ]; then
echo "valid"
else
echo "invalid"
fi
Таким образом, если вы не вызываете с аргументом, он все равно будет сравнить с пустой строкой.
В общем, вы всегда должны указывать кавычки вокруг разложений переменных, иначе вы можете увидеть непредвиденные ошибки, если переменная пуста (как вы только что видели) или переменная имеет в ней пробел.
Thx для подсказки, но это была не настоящая проблема .. вот мой ответ выше – user2650277
@ user2650277 Для справок в будущем , если вы получаете сообщение об ошибке, вы должны добавить сообщение об ошибке на вопрос, иначе вы можете получить ответы, которые находятся вне поля (например, мой). – SethMMorton
агд $1
не имеет никакого значения. Вы могли бы сделать что-то подобное.
if [ -z $1 ]
then
echo "you forgot to give me an arg."
exit 1
fi
if [ $1 = "cat" ]; then
echo "valid"
else
echo "invalid"
fi
вы также можете сделать:
if [ $# -ne 1 ]; then
echo "Usage: ./script.sh <arg1>"
exit 1
fi
Почему вы думаете, что есть ошибка синтаксиса? –
Я получал синтаксическую ошибку: неожиданный конец файла. Проблема заключалась в том, что мне нужно было преобразовать test.sh в формат Unix – user2650277