путь к файлу в переменной с пользовательского ввода

Я пытаюсь создать скрипт, где пользователь даст путь к некоторому файлу, а скрипт проверяет, существует ли файл и что-то делать … Я написал этот код:

read -p "Enter path: " $path #check if path is not empty string if [ -z $path ] then echo "path is empty string" exit fi #check if file exist if [ ! -f $path ] then echo "file doesnt exists" fi 

моя проблема заключается в условии secound – если я изменяю $path с некоторой строкой, все в порядке, но когда я ввожу путь через переменную, всегда «файл не существует», я пытался с

 if [ ! -f `$path` ] 

но если файл не имеет результата разрешения на выполнение, тоже сбой. Может кто-нибудь помочь мне исправить код выше? 🙂

EDIT извините, я имел в виду -z и -f не double -z условие

  • Каков самый короткий способ выбрать первый доступный порт в определенном диапазоне с помощью Bash?
  • Сценарий Bash для перебора файлов
  • Что означает PROG = $ {0 ## * /} в сценарии bash?
  • Файлы tar для Linux менее 3 месяцев назад, используя дату в filename
  • в чем разница между if и [[in bash?
  • Основное поведение bash
  • Есть ли ярлык в bash для удаления последнего сегмента пути?
  • Как определить аналогичную функцию bash сразу
  • One Solution collect form web for “путь к файлу в переменной с пользовательского ввода”

    Проблема здесь в том, что обратные сигналы:

     `command` 

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

    Как исправить это

    использование

     if [ -f "$path" ] 

    Двойные кавычки предназначены для защиты от разбиения слов (в случае, если они содержат пробелы), и против globbing (в случае, если путь содержит подстановочные символы, такие как * или ? )

    Еще лучше, поскольку путь может быть в каталоге, просто проверьте наличие пути с -e :

     if [ -e "$path" ] 
    Interesting Posts

    Почему grep не работает с перенаправлением?

    Команда tput + как найти диалоговое окно в верхней части экрана

    Отметить как исполняемый файл

    Как копировать в две папки одновременно с помощью GNU параллельно, создавая несколько потоков?

    bash autocomplete не работает, не «завершает»

    Наушники JBL должны подключаться дважды, чтобы получить хорошее качество звука (элементарные os и мята)

    Как использовать zypper в сценариях bash для кого-то из apt-get?

    `mail` – Как я могу снова отобразить список адресов электронной почты?

    Можно ли использовать / dev / stdin, если программа не читает со стандартного ввода, а только из файлов?

    Как переименовать определенные каталоги, если у родителя есть определенное имя?

    Как запускать несколько скриптов параллельно

    Выполняют ли команды в подстановке команд, подстановке процессов и в конвейере принимают входные данные stdin?

    Veritas Volume Manager на OpenSolaris

    Игнорировать DNS с сервера DHCP в Ubuntu

    SSH, Putty и отправка данных в кластер

    Linux и Unix - лучшая ОС в мире.