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

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 に答える
2

それは動作しますか?

いいえ、うまくいきません。Bash Reference Manualの §3.2.4.1「Looping Constructs」によると、存在するループの種類は次のとおりです。

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

さらに、次の 2 行:

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

egrep すぐに実行し、それに応じて変数を設定します。このコマンド:

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

は常に同じ戻り値を返します。これは、ループ内で$firstlineandが変更されることはないため$secondlineです。egrep実際にループ内にコマンドを入れる必要があります。

于 2012-11-27T19:14:14.047 に答える