我是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
型
1条答案
按热度按时间ac1kyiln1#
这就是我最终用来克服脚本没有正确阅读CFG的问题的方法。
CFG示例
TESTDIR1,/u01/home/dir1/dir2/test1,. txt,7
TESTDIR2,/u01/home/dir1/dir2/test2,. csv,7
剧本
字符串