簡體   English   中英

關於UNIX Shell腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM