shell While/ For循环不拾取命令

n1bvdmb6  于 2023-08-07  发布在  Shell
关注(0)|答案(1)|浏览(88)

我是Korn shell脚本的新手,但我正在学习。我尝试运行一个嵌套FOR循环的WHILE循环来读取CFG文件并删除某些超过设定天数的文件。该脚本运行正常,没有错误,但它似乎没有拾取我在循环中的命令。下面将包括脚本,CFG文件示例和脚本的输出,其中包括set -x。到目前为止,我所尝试的一切都失败了,或者没有收到命令。蒂亚!
CFG文件;

FILE_PATH=/export/home/jaqst/training/testdir_1/ *.txt DAYS=7
FILE_PATH=/export/home/jaqst/training/testdir_1/ *.txt DAYS=14

字符串
脚本;

#!/bin/ksh
 set -x
 
 . ${HOME}/.profile
 #set up variables
 CFGFILE=/export/home/jaqst/training
 DATE=$(date +%s)
 #
 # Main processing starts here
 #
 echo `date +%d\ %b\ %H:%M` `basename $0` ${USER} "Job started"
 #
 #
 # CD CFG File location
 #
 cd ${CFGFILE}
 if [[ $? -ne 0 ]]
    then
    echo `date +%d\ %b\ %H:%M` `basename $0` ${USER} "failed to cd into ${CFGFILE}"
    exit 9
 fi
 #
 # Remove files that are older than specified age
 #
 while read FILE_PATH;
 do
    read DAYS
       for FILE in $FILE_PATH/*; do
          for TIME in $DAYS/*; do
             if [ -f $FILE ]; then
                if [ "$(find $FILE -mtime +$DAYS -print)" ]; then
                   rm -f $FILE
                   echo "Deleted $FILE"
                fi
             fi
       done
 done < hkeep_hera_cfg
 #
 if [[ $? -ne 0 ]]
    then
    echo `date +%d\ %b\ %H:%M` `basename $0` ${USER} "failed to remove file"
    exit 9
 fi
 #
 echo `date +%d\ %b\ %H:%M` `basename $0` ${USER} "Job Completed"
 #
 exit 0


输出;

12 Jul 11:44 hkeep_hera_draft jaqst Job started
+ cd /export/home/jaqst/training
+ [[ 0 -ne 0 ]]
+ 0< hkeep_hera_cfg
+ read FILE_PATH
+ read DAYS
+ 0< hkeep_hera_cfg
+ [ -f FILE_PATH=/export/home/jaqst/training/testdir_1 ]
+ [ -f FILE_PATH=/export/home/jaqst/training/testdir_1 ]
+ [ -f DAYS='7/*' ]
+ [ -f DAYS='7/*' ]
+ [[ 0 -ne 0 ]]
+ read FILE_PATH
+ date '+%d %b %H:%M'
+ basename ./hkeep_hera_draft
+ echo 12 Jul 11:44 hkeep_hera_draft jaqst 'Job Completed'
12 Jul 11:44 hkeep_hera_draft jaqst Job Completed
+ exit 0


从输出中看,它似乎只阅读CFG文件中的第一行。
我已经尝试了WHILE和FOR循环的组合,并开始研究使用AWK命令,看看这是否会允许脚本更容易地读取文件。
我也尝试了下面的方法,但它错误地显示消息-[52] [: argument expected

while read FILE_PATH; do 
   read DAYS
   for FILE in $FILE_PATH/*; do
   for TIME in $DAYS/*; do
   mod_time=$(stat -c %Y $FILE)
   current_time=$(date +%s)
   age=$(( (current_time - mod_time) / (24 * 60) ))
 if [ $age -gt $DAYS ]
    then 
    rm $FILE
 fi
 if [[ $? -ne 0 ]] 
    then
    echo `date +%d\ %b\ %H:%M` `basename $0` ${USER} "failed to remove file"
    exit 9
 fi
 done < hkeep_hera_cfg

ac1kyiln

ac1kyiln1#

这就是我最终用来克服脚本没有正确阅读CFG的问题的方法。
CFG示例
TESTDIR1,/u01/home/dir1/dir2/test1,. txt,7
TESTDIR2,/u01/home/dir1/dir2/test2,. csv,7
剧本

while IFS=, read ID FILE_PATH EXT DAYS ;
do
if [[ -z "${ID}" || -z "${FILE_PATH}" || -z "${EXT}" || -z "${DAYS}" ]];
then
  echo `date +%d\ %b\ %H:%M` `basename $0` ${USER} "Failed to set up, please check config file." >> ${ERRLOG}
  mail_err
  exit 9
fi
#
cd ${FILE_PATH}
if [[ $? -ne 0 ]]
then
   echo `date +%d\ %b\ %H:%M` `basename $0` ${USER} "failed to cd into ${FILE_PATH}" >> ${ERRLOG}
   mail_err
   exit 9
fi
#
find . \( -name ${EXT} \) -mtime +${DAYS} -exec rm -r {} 2>/dev/null \;
if [[ $? -ne 0 ]]
then
  echo `date +%d\ %b\ %H:%M` `basename $0` ${USER} "failed to remove ${EXT} from ${FILE_PATH}" >> ${ERRLOG}
  mail_err
  exit 9
fi 
done < ${CFGFILE}

字符串

相关问题