2013-02-18 3 views
1

Я пишу простой скрипт, чтобы проверить, существует ли путь к указанному пути. Это то, что у меня естьBash: инструкция if, вложенная в цикл

echo "Please specify complete directory path" 
read file_path 

for file in $file_path; do 
    if [[ -d "$file" ]]; then 
     echo "$file is a directory" 
     break 
    else 
     echo "$file is not a directory, please try again." 
fi 
done 

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

Спасибо.

ответ

1

Как насчет этого?

echo "Please specify complete directory path" 

while read file; do 
    if [[ -d "$file" ]]; then 
     echo "$file is a directory" 
     break 
    fi 
    echo "$file is not a directory, please try again." 
done 
+0

Почему не 'в то время чтения file' вместо бесконечного цикла? Вам нужно каким-то образом обработать дело EOF, но это все равно отсутствует в коде. –

+1

@JonathanLeffler: хорошая точка - изменен –

+0

Спасибо за быстрый ответ! – user2073860

0

Нет необходимости разделить путь на части, проверяя весь путь с -d покажет вам, является ли он каталогом. Вы должны поместить весь тест на время цикла до тех пор, пока пользователь не получает это право:

#/bin/sh 
set -e 
file_path='' 
while [ ! -d "$file_path" ] 
do 
    echo "Please specify complete directory path" 
    read file_path 
    if [ ! -d "$file_path" ] 
    then 
     echo "$file_path is not a directory, please try again." 
    fi 
done 

я могу использовать его как этот

$ sh /tmp/test.sh 
Please specify complete directory path 
foobar 
foobar is not a directory, please try again. 
Please specify complete directory path 
/var/www 
Смежные вопросы