请赐教。以下 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