2015-11-18 4 views
2

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

if [[ -z $filepath || ! -f $filepath ]]; then 
    printf "\nError: File does not exist. Try again\n" 

    while true : 
    do 
     read -p "Please provide file path: " filepath 
     if [[ -z $filepath || ! -f $filepath ]]; then 
      continue 
     else 
      break 
     fi 
    done 
fi 

и вот еще одна попытка, которая не удалась из-за ошибки синтаксиса

if [[ -z $filepath || ! -f $filepath ]]; then 
    printf "\nError: Bad file path. Try again\n" 
    while true : 
    do 
     read -p "Please enter file path: " filepath 
     case $filepath in 
       "") 
        echo "Bad file path. Try again" 
        continue ;; 
       ! -f) 
        echo "Bad file path. Try again" 
        continue ;; 
       *) 
        break ;; 
     esac 
    done 

ответ

1

Как насчет

until [[ -n $filepath && -f $filepath ]]; do 
    read -p "Please provide file path: " filepath 
done 
1

Я думаю, что вы просто хотите while цикла, пока файл не существовать. Вы могли бы сделать что-то подобное,

read -p "Please provide file path: " filepath 
while [[ ! -f "$filepath" ]]; do 
    printf "Bad file path ($filepath). Try again\n" 
    read -p "Please provide file path: " filepath 
done 
printf "$filepath exists\n" 
+0

Ваше решение на самом деле более легко понять, но другой имеет меньше строк кода – Ali

+1

@Ali Если я что-то отсутствует, у них есть такое же количество строк, если вы опустите сообщение об ошибке пути к файлу. –