2017-06-05 10 views
2

特定の日付のファイルをチェックするコードを書き込もうとしています。存在する場合はローカルのホームパスに取得し、存在しない場合は他のファイルを取得します。異なる日付。unix ftpスクリプトの条件

#!/bin/ksh 

FILE1="CAS_20170604.txt" 
FILE2="CAS_20170603.txt" 

/usr/bin/ftp -n 93.45.148.9 << EOF 
    user usr passwd 
    cd "/abc/def" 
    bin 
    get $FILE1 

if [ ! -f $FILE1 ]; 
then 
    cd "/abc/def" 
    bin 
    get $FILE2 
fi 
    bye 
    !EOF! 

スクリプトを実行するには、私は必要とされていないファイル、および以下のエラーの両方を取得していますが:

?Invalid command 
?Invalid command 

誰かが私をここに助けることができるしてください。

+0

あなたがwget'、 'curl'、' 'fetch'のような任意のコマンドラインクライアントを持っていますか? 'ftp'クライアントを直接使用するスクリプトを作成するのではなく、シェルスクリプトが解釈できるリターンコードを提供できるものを使用してFTPプロトコル要求を行う方が簡単かもしれません。あなたがこれがオプションかもしれないと思うなら、答えを示すことを喜んで。 – ghoti

答えて

2

ftpスクリプトでシェルコマンドを使用することはできません。

次の2つにスクリプトを分割する必要があります。

/usr/bin/ftp -n 93.45.148.9 << EOF 
user usr passwd 
cd "/abc/def" 
bin 
get $FILE1 
bye 
!EOF! 

if [ ! -f $FILE1 ]; 
then 
    /usr/bin/ftp -n 93.45.148.9 << EOF 
    user usr passwd 
    cd "/abc/def" 
    bin 
    get $FILE2 
    bye 
    !EOF! 
fi 
+1

ありがとう:-)それは働いて、さらに私は、現在の日付のファイルが見つからない場合、画面に表示する "ファイルを開くに失敗しました"という出力を防ぐために、最初のFTPを実行中にリダイレクトを使用しました。次のようになります。/ usr/bin/ftp -n 93.179.136.9 << !EOF! >/dev/null 2>&1 – User123

関連する問題