アプリ版:「スタンプのみでお礼する」機能のリリースについて

Linuxのシェルを作成しており、その中でFTP接続をしてます。
接続先の特定のファイルのファイルサイズをチェックして、それを変数に入れたいのですが、
変数に入れる部分がわかりません。

Linux内の特定のファイルをFTPで転送して、転送後のファイルサイズが一致してるかをチェックするために上記の対応を行ってます。

FTP接続後に以下のコマンドで、ファイルサイズが調べられることは解りました。
quote SIZE ファイル名
この結果を変数に代入するにはどうすればいいでしょうか?
FTP接続中にそのような対応は可能なのでしょうか?

ちなみに、Linux上では既にファイルサイズを取得している(変数に入れてある)ので、
あとは、この変数と、FTP上で取得したファイルサイズの比較をやりたい。といった状況です。
FTP側で取得したファイルサイズを変数に入れられず困っています。

変数代入方法等ありましたらご教授願います。

A 回答 (2件)

理解してもらえなかったみたいなので、サンプルを書きます。



ご提示のサンプルはヒアドキュメント構文が間違っていたり、ログを取る必要性があるみたいなので多少変えました。

コマンドはlftpにしてますが、こっちのほうが使い勝手がいいと思います。
ftpコマンドのVervoseオプションだとサーバーからのレスポンスが全部戻ってきて制御構造をするためには加工をする必要がありますから。

(test1.sh)
---<ここから>---
#!/bin/bash
NASIP=IPアドレス
TARGET=ファイル名
lftp $NASIP <<END | tee Log.txt
user ユーザー パスワード
put /log/$TARGET /log/$TARGET
quote SIZE /log/$TARGET
bye
END
---<終了>---
というシェルスクリプトを作ります。

これでシェルから

% size=`./test1.sh` && echo $size

とすればSIZEコマンドの標準出力が変数に入りませんか?
    • good
    • 0
この回答へのお礼

丁寧な説明ありがとうございました。
また回答が遅れ申し訳ありません。

確かに希望通りの動作を得られました。助かりました。

ありがとうございます。

お礼日時:2012/11/02 10:18

可能です。

コマンドの標準出力を変数に格納すれば良いのです。

ftpサイトに接続するシェルスクリプトを作成し、ここではサブルーチンと見なします。
そのシェルスクリプトを呼び出すシェルスクリプトを作成し、メインルーチンと見なします。

メインルーチンからサブルーチンをバッククォートもしくは$()で呼びだし、サブルーチンの標準出力をメインルーチンの変数に格納すればいいのです。

サンプルはこんな感じ。

(メインルーチン)

size=`./サブルーチンのファイル名`

sizeという変数にサブルーチンの表示結果が入ります。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
試して見たのですが、 quoteコマンドが実行できないというエラーが出てしまいました。↓
[root@logserv test]# sh test1.sh
test1.sh: line 77: quote: command not found

やり方が違うのでしょうか?
コードを記述しますので、アドバイスいただけますでしょうか?

ftp -i -v -n $NASIP <<END >>Log.txt
user uset1 user1
bin
put /log/$TARGET /log/$TARGET
size=`quote SIZE /log/$TARGET`
bye

ちなみに、size=`` を記述していない状態では、quoteは正常に動いていました。
変数sizeにquoteの結果を代入する方法を教えて下さい。

お手数ですが、宜しくお願いします。

お礼日時:2012/10/24 10:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A