Shell 脚本

Shell 脚本

请赐教。以下 shell 脚本片段是什么意思?

FNAME=Grapes.txt

touch Apple.txt
   ls Banana.txt | while read FNAME
   do
    /somePath/ftp_autojobs.sh someFolder/LG $FNAME Apple.txt
   done

编辑:ftp_autojobs.sh 将文件传输到服务器。

ftp_autojobs.sh的内容:

SO=`tput smso`
SE=`tput rmso`
RETURN="$SO RETURN $SE"

TEMP_FN=`mktemp -c -d . -p ftp`
TEMP_LOG=`mktemp -c -d . -p log`

echo open some.server.com>>$TEMP_FN
echo user user pass>>$TEMP_FN
echo cd \"$1\">>$TEMP_FN
echo binary>>$TEMP_FN

shift
until [ $# -eq 0 ]
do
   echo mput \"$1\">>$TEMP_FN
   shift
done

echo bye>>$TEMP_FN

ftp -vin < $TEMP_FN > $TEMP_LOG

FILE_COUNT=`grep "226 Transfer complete" $TEMP_LOG|eval wc -l|cut -d ' ' -f 1`

if [ $FILE_COUNT -eq 0 ]
then
   rm -f ftp_commands.txt 2>/dev/null
   rm -f ftp.log 2>/dev/null
   mv $TEMP_FN ftp_commands.txt
   mv $TEMP_LOG ftp.log
   cat ftp.log
   banner "WARNING" "FTP FAILED"
else
   rm -f $TEMP_FN
   rm -f $TEMP_LOG
   echo $FILE_COUNT Files sucessfully transferred.
fi

非常感谢。

答案1

采用简单的格式....

将 FNAME 设置为 Grapes.txt

创建Apple.txt

然后执行 ftp_autojobs.sh someFolder /LG Grapes.txt Apple.txt

完毕

仅此而已......

答案2

  • 它更新 Apple.txt 上的时间戳(如果不存在则创建它)
  • 如果 Banana.txt 存在并且是一个文件,则 while 循环将运行一次,用 Banana.txt 代替 $FNAME
  • 如果 Banana.txt 存在且是一个目录,则对于 Banana.txt/ 中的每个项目,ftp_autojobs.sh 语句将运行,并使用项目的文件名代替 $FNAME

答案3

我猜测它正在将一些文件备份到 FTP 服务器。该脚本中有一些我们无法知道的“神奇”之处。“Apples.txt”文件似乎是某种日志。

最大的谜团是脚本的内容和参数ftp_autojob.sh。也许你可以为你的问题添加一些信息。

答案4

顺便说一句,我认为这篇文章写得还不够好,原因。请考虑以下内容:

 while read FNAME
 do
    /somePath/ftp_autojobs.sh someFolder/LG "$FNAME" Apple.txt
 done < Banana.txt

相关内容