0

我想知道语法是否正确。抱歉,我现在无法测试它,但这对我很重要。它是一个 FTP 脚本。文件名是a.txt,我想创建一个脚本来上传文件,直到它成功。它会起作用还是不起作用?任何人都可以帮助我建立正确的请

LOGFILE=/home/transfer_logs/$a.log
DIR=/home/send
Search=`ls /home/send`
firstline=`egrep "Connected" $LOGFILE`
secondline=`egrep "File successfully transferred" $LOGFILE`

if [ -z "$Search" ]; then
cd $DIR
ftp -p -v -i 192.163.3.3 < ../../example.script > ../../$LOGFILE 2>&1
fi

if
egrep "Not connected" $LOGFILE; then
repeat
ftp -p -v -i 192.163.3.3 < ../../example.script > ../../$LOGFILE 2>&1
until
[[ -n $firstline && $secondline ]]; 
done
fi

example.script 包含:

 binary
 mput a.txt
 quit 
4

2 回答 2

2

它会起作用还是不起作用?

不,这行不通。根据§3.2.4.1 "Looping Constructs" of the Bash Reference Manual,这些是存在的循环类型:

until test-commands; do consequent-commands; done

while test-commands; do consequent-commands; done

for name [ [in [words …] ] ; ] do commands; done

for (( expr1 ; expr2 ; expr3 )) ; do commands ; done

您会注意到它们都不是以 . 开头的repeat

此外,这两行:

firstline=`egrep "Connected" $LOGFILE`
secondline=`egrep "File successfully transferred" $LOGFILE`

egrep 立即运行,并相应地设置它们的变量。这个命令:

[[ -n $firstline && $secondline ]]

将始终给出相同的返回值,因为循环中的任何内容都不会修改$firstlineand $secondline。您实际上需要egrep在循环中放置一个命令。

于 2012-11-27T19:14:14.047 回答
2

ftp返回合理的结果?最简单的写法是:

while ! ftp ...; do sleep 1; done

如果您坚持搜索日志文件,请执行以下操作:

while :; do
    ftp ... > $LOGFILE
    grep -qF "File successfully transferred" $LOGFILE && break
done

或者

while ! test -e $LOGFILE || grep -qF "Not connected" $LOGFILE; do
    ftp ... > $LOGFILE
done
于 2012-11-27T19:16:11.253 回答