2010-03-29 161 views
0

當文件夾中沒有文件時,以下腳本將進入for循環。不知道我可以修改,以便它不會進入for循環。另外,當目錄退出狀態內沒有文件應該是成功的。包裝腳本檢查以下腳本關於UNIX Shell腳本

 FILESRAW ="/exp/test1/folder" . 
for fspec in "$FILESRAW"/* ; do 
    echo "$fspec" 
    if [[ -f ${fspec} ]] ; then 
     ..... processing logic 
    else 
    ... processing logic 
    fi 
done 

回答

3
使用bash

如果退出狀態,

可以設置nullglob

shopt-s nullglob

如果您有隱藏文件,

shopt -s dotglob

用KSH,

#!/bin/ksh 
set -o noglob 
for file in /path/* 
do 
    .... 
done 
+0

我使用korn外殼。我也不想要任何隱藏的文件。我是否需要將以上兩行放在shell腳本的開頭 – Arav 2010-03-30 00:45:40

+0

中,您在腳本之前設置了它們 – ghostdog74 2010-03-30 01:13:57

+0

非常感謝信息 – Arav 2010-03-30 01:20:39

0
for fspec in `dir $FILESRAW` ; do 
+0

非常感謝信息 – Arav 2010-03-30 01:13:33

+0

@Arav請注意您是否找到有用的答案。 – 2011-07-30 18:59:01

0

要退出,如果$ FILESRAW爲空:

[ $(ls "$FILESRAW" | wc -l) -eq 0 ] && exit 0

如果此測試之前的循環,它會阻止執行到達的循環,如果$ FILESRAW是空的。

當$ FILESRAW是空的, 「$ FILESRAW」/ *擴展爲 「/ EXP/TEST1 /文件夾/ *」,作爲ghostdog74所指出的,你可以通過設置了nullglob與改變這種行爲

shopt -s nullglob 

如果你想隱藏的文件,設置dotglob還有:

shopt -s dotglob 

或者,你可以使用,而不是globing LS。這與非常充分的目錄工作的優勢(用管,你不會達到最大極限參數):

ls "$FILESRAW" | while read file; do 
    echo "$file" 

,如果你想隱藏的文件,這變得混亂,因爲你需要排除。並..以模擬globing行爲:

ls -a "$FILESRAW" | egrep -v '^(\.|\.\.)$' | while read file; do 
    echo "$file" 
+0

只使用'ls'會省去隱藏的文件。 – ghostdog74 2010-03-30 00:20:04

+0

謝謝,我已經添加了一些關於隱藏文件的討論。 – 2010-03-30 00:28:36

+0

非常感謝這些信息 – Arav 2010-03-30 01:13:07