关于UNIX Shell脚本

时间:2010-03-29 23:51:44

标签: unix shell

当文件夹中没有文件时,下面的脚本进入for循环。不知道我可以修改什么,以便它不会进入for循环。此外,当目录中没有文件时,退出状态应该是成功的。包装器脚本检查以下脚本的退出状态

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

4 个答案:

答案 0 :(得分:3)

如果使用bash,

您可以设置nullglob

shopt-s nullglob

如果您有隐藏文件,

shopt -s dotglob

使用ksh,

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

答案 1 :(得分:0)

for fspec in `dir $FILESRAW` ; do

答案 2 :(得分:0)

如果$ FILESRAW为空,则退出:

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

如果此测试在循环之前,如果$ FILESRAW为空,它将阻止执行到达for循环。

当$ FILESRAW为空时,“$ FILESRAW”/ *扩展为“/ exp / test1 / folder / *”,因为ghostdog74指出,你可以通过设置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"

答案 3 :(得分:0)

如果您使用的是ksh, 尝试将其放在for循环的前面,以免它进入其中。 “ 设置-noglob ” 甚至我也遇到了同样的问题,但是我能够通过这样做解决它。