2013-02-18 347 views
1

我在寫一個簡單的腳本來檢查輸入的目錄路徑是否存在。這是我的Bash:如果語句嵌套for循環

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情況,但是代碼中缺少這一點。 – 2013-02-18 20:22:17

+1

@JonathanLeffler:好點 - 更改 – 2013-02-18 20:23:12

+0

感謝您的快速回復! – user2073860 2013-02-18 20:28:17

0

無需將路徑拆分爲其部分,使用-d測試整個路徑會告訴您它是否是目錄。你需要把整個測試進入一個while循環,直到用戶得到它的權利:

#/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