感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

ヒアドキュメントを使って、特定のファイルをFTPするシェルスクリプト(bash)のサンプル

<スポンサーリンク>

ヒアドキュメント

ヒアドキュメントの仕組みは、シェルが「<<」の後の文字列をEOFマークと認識して、その直後の行からその次のEOFマークの直前までをコマンドへ順次実行するという仕組みのこと。
今回のbashFTPを実行するサンプルでは、ヒアドキュメントの仕組みを使う。

teeコマンド

teeコマンドは、標準入力から読み込んだ内容を、標準出力とファイルの両方に出力する。
リダイレクトすると、標準出力の内容をファイルなどに向けるので、標準出力には出なくなるが、teeコマンドを使えば、標準出力にも出力も出しつつ、ファイルにも書き込みができる。
teeの指定を相対パスにしたら、以下のようなエラーが出たので、teeの後に指定するのは絶対パスにした方がいいかもしれない。

tee: ./log/ftp.log: そのようなファイルやディレクトリはありません

シェルスクリプト内でFTPを実行するシェルスクリプトのサンプル

#!/bin/sh
put_server_ip=192.168.22.333 
put_server_user=hoge
put_server_pass=fuga
local_dir=/home/hoge/trg
put_dir=/home/fuga/rcv
put_file_name=test.trg
log_dir=/home/hoge/scripts/log

echo "${0} start!---"
cd ${local_dir}

ftp -n -v ${put_server_ip} << _EOF_ 2>&1 | tee ${log_dir}/ftp.log
user ${put_server_user} ${put_server_pass}
cd ${put_dir}
put ${put_file_name}
quit
_EOF_

標準出力には以下のように表示されて、実際にファイルの転送にも成功していた。

[sysmgr@horiko scripts]$ ./ftptest.sh
./ftptest.sh start!---
Connected to 192.168.22.333 (192.168.22.333 ).
220 Welcome to blah FTP service.
331 Please specify the password.
230 Login successful.
250 Directory successfully changed.
local: test.trg remote: test.trg
227 Entering Passive Mode (192.168.22.333 ,86,14).
150 Ok to send data.
226 Transfer complete.
221 Goodbye.
||<