2016-12-07 9 views
0

Новичок Башпоказ, если существуют файлы - если я использую 1 аргумент он работает, но когда я использовать несколько он показывает ошибку

кто-нибудь знает проблему, кажется, довольно легко решить, но я просто не могу понять себя!

основном команда, которую я делаю что-то делает аргументы, которые пользователь вводит эти аргументы являются именами файлов [ЭТО ДЛЯ НАЗНАЧЕНИЯ SO I Cant ОБСУДИТЬ СОДЕРЖАНИЕ] позволяет просто сказать, что список файлов для примера ради

нет никаких ограничений на количество файлов, которые пользователь может ввести КОДА (MAIN БИТ, чТО ИМЕЕТ ПРОБЛЕМЫ)

if [ -e "$*" ] 
then 
    ls "$*" 
    echo "your files are listed" 
else 
    echo "file does not exist" 
exit 0 
fi 

в основном, если оператор не работает по какой-то причине

я хочу это S о том, что пользователь может ввести столько аргументов, сколько они хотят

и если заявление будет проверять, если все аргументы (файлы) существуют

до сих пор, когда я просто наберите в 1 аргумента он проверяет, если он существует

но когда я типа в более чем 1, то он всплывает с ошибкой «слишком много аргументов» и сообщение об ошибке, что оно не существует

помощь будет высоко :)

и если вы чувствуете, что вы поможете мне обмануть, не волнуйтесь, главный код в порядке, но это просто битва!

+2

'[-e" $ * "]' сглаживает все ваши имена файлов и проверяет, существует ли *, что * существует как одно имя. Конечно, это не сработает. –

ответ

1

test -e ожидает : один файл является следующим аргументом. "$*", напротив, объединяет все ваши аргументы в одно имя - поэтому, если у вас есть файлы с именем first file.txt и second file.txt, [ -e "$*" ] будет смотреть, будет ли один файл с именем примерно first file.txt second file.txt (с пробелами и обоими расширениями .txt) настоящее.

for file in "[email protected]"; do      ## this could also be just "for file; do" 
    if ! [ -e "$file" ]; then    ## note that we're checking one at a time 
    echo "File $file does not exist" >&2 
    exit 1 
    fi 
    ls "$file" ## hopefully this is just for debugging 
done 

echo "Your files all exist" >&2 
exit 0 ## typically unnecessary -- default exit status is that of the last command 
     ## ...and echo is unlikely to fail. 

Обратите внимание, что ls should not be used programatically, и даже если вы сделали хотите напечатать только имена файлов, которые на самом деле существуют для потребления человека (в отличие от сценария/программного использования), было бы более эффективным для вызова ls раз со всеми именами, которые существуют, vs once-per-file; однако это не входит в сферу рассматриваемого вопроса.

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

  • Нет связанных вопросов^_^