几天前,我在处理我们的 EMC 批量文件管理器上的大量文件的脚本时遇到了问题。这是我的工作代码
unset xP_Array
declare -a xP_Array
...
export LOG=$HOME/BIN/somelogfile
export OUT=/path/to/device
...
echo "`date '+%m/%d/%y %T:'` START -- MEM" >> $LOG
echo "`date '+%m/%d/%y %T:'` Go to work directory." >> $LOG
cd ${OUT}
echo "`date '+%m/%d/%y %T:'` Fill the array." >> $LOG
for f in "$OUT"/*XML; do
xP_Array+=( "${f#$OUT/}" )
done
echo "`date '+%m/%d/%y %T:'` Get array length." >> $LOG
Plen=${#xP_Array[@]}
echo "`date '+%m/%d/%y %T:'` MEM: $Plen FILES TO PROCESS." >> $LOG
echo "`date '+%m/%d/%y %T:'` Check if zero files." >> $LOG
date_fmt='%m/%d/%y %T'
if (( Plen = 0 ))
then
printf "%($date_fmt)T: ZERO FILES\n" $(date +%s) >> $LOG
fi
echo "`date '+%m/%d/%y %T:'` Loop." >> $LOG
for i in "${xP_Array[@]}"
do
echo "`date '+%m/%d/%y %T:'` Move file to run directory." >> $LOG
mv $OUT/$i RUN/
echo "`date '+%m/%d/%y %T:'` PROCESSING "$i"." >> $LOG
[[[DATABASE LOAD DONE HERE]]]
echo "`date '+%m/%d/%y %T:'` Check DB LOAD return value." >> $LOG
EXIT=`echo $?`
case $EXIT in
0) echo "`date '+%m/%d/%y %T:'` COMPLETE." >> $LOG
mv RUN/"$i" "$ARCH"
;;
*) echo "`date '+%m/%d/%y %T:'` ERROR. "$i" MOVED TO RECON." >> $LOG
mv RUN/"$i" "$RECON"
;;
esac
done
echo "`date '+%m/%d/%y %T:'` END -- MEM" >> $LOG
我想知道它是否可以更快地工作。我已经在与我的 DBA 合作,看看是否可以加快数据库插入速度,但我想知道循环本身是否可以运行得更快。
顺便说一句,echo
当脚本完成时,所有语句都被重定向到我自己通过电子邮件发送的日志文件。他们是否减慢了脚本的速度?
可以优化此脚本以更快地运行吗?