2014-02-09 4 views
0

У меня возникли проблемы с поиском ошибки синтаксиса в следующем скрипте.Передача аргумента в bash

Баш test.sh кошка

#!/bin/bash 
if [ $1 = "cat" ]; then 
echo "valid" 
else 
echo "invalid" 
fi 
+0

Почему вы думаете, что есть ошибка синтаксиса? –

+0

Я получал синтаксическую ошибку: неожиданный конец файла. Проблема заключалась в том, что мне нужно было преобразовать test.sh в формат Unix – user2650277

ответ

2

Если вы не давая аргументы, $1 будет вычисляться в пустое пространство, и вы, вероятно, видя line 2: [: =: unary operator expected. Чтобы исправить, добавить кавычки $1:

#!/bin/bash 
if [ "$1" = "cat" ]; then 
echo "valid" 
else 
echo "invalid" 
fi 

Таким образом, если вы не вызываете с аргументом, он все равно будет сравнить с пустой строкой.

В общем, вы всегда должны указывать кавычки вокруг разложений переменных, иначе вы можете увидеть непредвиденные ошибки, если переменная пуста (как вы только что видели) или переменная имеет в ней пробел.

+0

Thx для подсказки, но это была не настоящая проблема .. вот мой ответ выше – user2650277

+2

@ user2650277 Для справок в будущем , если вы получаете сообщение об ошибке, вы должны добавить сообщение об ошибке на вопрос, иначе вы можете получить ответы, которые находятся вне поля (например, мой). – SethMMorton

0

агд $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 
0

вы также можете сделать:

if [ $# -ne 1 ]; then 
    echo "Usage: ./script.sh <arg1>" 
    exit 1 
fi 
Смежные вопросы