2015-05-30 3 views
-1
valid() 
{ 
if [[ "$1" = "0" ]]; then 
     echo "Pass a file name as argument" 
     exit 1 
fi 
} 

valid 
if [ -f $1 ]; then 
     echo "$1 exists" 
else 
     echo "$1 doesnt exist" 
fi 

В приведенном выше примере, непросроченный() функция не работает, почему так? Когда действительный аргумент передается, он проверяет имя файла и печатает, но когда он не передается, он печатает «существует».Передача аргумент функции не работает

ответ

1

Вы должны проверить строки null при взятии строки в качестве аргумента, а не сравнивать ее с 0. Вам также необходимо передать аргумент действительной функции.

valid() 
{ 
if [ -z "$1" ]; then 
     echo "Pass a file name as argument" 
     exit 1 
fi 
} 

valid $1 

if [ -f "$1" ]; then 
     echo "$1 exists" 
else 
     echo "$1 doesnt exist" 
fi 
+0

Я пробовал, он не работает, программа выходит с «Передавать файл как аргумент», даже если я передаю один – san1512

+1

Какую оболочку вы используете? Я тестировал это с помощью bash, передавая имя файла и без аргумента, и он работает так, как ожидалось. Не могли бы вы разместить свои ошибки? – rahul

+0

'./test_arg.sh fr Передайте имя файла как аргумент Я использую bash. Передача аргумента 'fr'soso печатает то же самое. – san1512

1

Вместо if [[ "$1" = "0" ]]; then вы можете просто изменить его на:

if [[ "$1" = "" ]]; then 

и он будет работать, как ожидалось.

И вам нужно дважды указать свои переменные внутри синтаксиса [ ]. [[ ]] синтаксис может обрабатывать пробелы без двойной котировки, но [ ] не может.

+0

Я пытался с if [["$ 1" = ""]]; то 'все еще выход такой же. @jahid – san1512

+0

Я получаю вывод '' Передача имени файла в качестве аргумента '', вы уверены, что не сделали никаких других ошибок ...? – Jahid

+0

Да @Jahid Я наконец-то понял .. спасибо – san1512

Смежные вопросы