[英]Regarding UNIX Shell Script
如果文件夾內沒有文件,則以下腳本進入for循環。 不知道我可以修改什么,以便它不會進入for循環內。 另外,當目錄內沒有文件時,退出狀態應該為成功。 包裝器腳本檢查以下腳本的退出狀態
FILESRAW ="/exp/test1/folder" .
for fspec in "$FILESRAW"/* ; do
echo "$fspec"
if [[ -f ${fspec} ]] ; then
..... processing logic
else
... processing logic
fi
done
如果使用bash,
您可以設置nullglob
shopt-s nullglob
如果您有隱藏文件,
shopt -s dotglob
用ksh,
#!/bin/ksh
set -o noglob
for file in /path/*
do
....
done
for fspec in `dir $FILESRAW` ; do
如果$ FILESRAW為空,要退出:
[ $( ls "$FILESRAW" | wc -l ) -eq 0 ] && exit 0
如果此測試在循環之前進行,則如果$ FILESRAW為空,它將阻止執行到達for循環。
當$ FILESRAW為空時,如ghostdog74所指出的,“ $ FILESRAW” / *擴展為“ / exp / test1 / folder / *”,您可以通過設置nullglob與
shopt -s nullglob
如果要隱藏文件,請同時設置dotglob:
shopt -s dotglob
或者,您可以使用ls而不是globing。 這具有處理非常完整的目錄的優點(使用管道,您將不會達到最大參數限制):
ls "$FILESRAW" | while read file; do
echo "$file"
如果您需要隱藏文件,這將變得更加混亂,因為您需要排除。 和..模擬全球行為:
ls -a "$FILESRAW" | egrep -v '^(\.|\.\.)$' | while read file; do
echo "$file"
如果您使用的是ksh,請嘗試將其放在for循環的前面,以免它進入其中。 “ set -noglob ”即使我也遇到了同樣的問題,但是我能夠通過這樣做解決它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.