-1

以下のスクリプトがありますが、エラーが見つかりません。誰か助けて?

具体的には、大きなファイルを別のファイルに分割し、任意のファイルを圧縮して移動し、宛先ファイル名の名前を変更して ftp で送信します。

何かがうまくいかない:(

インライン: put ${file} ${7}.T${j}(+1)

(+1) で終わる新しいファイル名でファイルの名前を変更しようとしています

敬具

#!/bin/bash

# configuration stuff

# ${1} absolute path file
# ${2} num_files
# ${3} output_filename
# ${4} ipMainframe ip to put files
# ${5} FTP username
# ${6} FTP password
# ${7} destination filename

if [ ! $# == 7 ]; then
        #number of parameter different of two
        echo "Number of parameter incorrect"
        echo "Command use: LLP_split_gzip_sendFTPandTrigger.sh absolute_path_file number_of_pieces output_filename ipMainframe userFTP pwdFTP destinationFilename"
        exit 1
fi

if [ -f ${1} ]; then
        # If file exists
        if [[ ${2} =~ ^[\-0-9]+$ ]] && (( ${2} > 0)); then
                # if number of pieces is an integer > 0
                #Remove old files
                echo "home directory = $HOME"
                CMD=`rm -f '"$HOME"/"$3"*'`
                if [ $? != 0 ]; then
                        echo "Impossible to remove old files $home/llp_tmp* $home/"$3"* in home directory"
                        echo $CMD
                fi
                # Calculate line for every file splitted
                total_lines=$(cat ${1} | wc -l)
                ((lines_per_file = (total_lines + ${2} - 1) / ${2}))
                # Split the actual file, maintaining lines.
                CMD=`split -l "$lines_per_file" "$1" "$HOME"/llp_tmp`
                if [ $? != 0 ]; then
                        echo "SPLITTING FILE ERROR: problem to split file."
                        echo $CMD
                        exit 3
                fi
                #For every file splitted rename and zip it
                i=1
                for file in $HOME/llp_tmp*; do
                        CMD=`mv "$file" "$3"."$i"`
                        if [ $? != 0 ]; then
                                echo "Impossible to rename file"
                                echo $CMD
                                exit 5
                        fi
                        CMD=`gzip "$3"."$i"`
                        if [ $? != 0 ]; then
                                echo "Impossible to compress file $3.$i"
                                echo $CMD
                                exit 6
                        fi
                        i=`expr $i + 1`
                done
                ftp -n ${4} << EOF

                j=1
                user ${5} ${6}
                for file in $3.*; do
                        put ${file} ${7}.T${j}(+1)
                        j=`expr $j + 1`
                done
                quit
        else
                echo "number of pieces second parameter must be more than 0."
                exit 2
        fi
else
        echo "absolute path first paramater doesnt exist"
        exit 1
fi
exit 0
4

2 に答える 2

2

ヒアドキュメントを終了していません。スクリプトを実行すると、次のようになります。

gash.sh: line 72: warning: here-document at line 54 delimited by end-of-file (wanted `EOF')
gash.sh: line 73: syntax error: unexpected end of file

ftp -n ${4} << EOFが問題です。ヒアドキュメントはどこにありますか?

EOF警告はすべてを示しています。マーカーがありません。これはインデントしてはならないことに注意してください。はEOF「列 0」にある必要があり、空白を含む末尾の文字はありません。

編集:単一のFTPセッション内でプログラム構造を使用したいようです-Bashでそれを行う方法がわかりません。Perl には、簡単に使用できる FTP モジュールがあります。簡単な例を次に示します。

use strict;
use Net::FTP;

my $ftp = Net::FTP->new ("hostname");
$ftp->login ("username", "password");
$ftp->binary ();

for my $file (glob("$ENV{HOME}/llp_tmp*")) {

    $ftp->put ($file); 
}
$ftp->quit();
于 2012-09-25T11:59:40.053 に答える
0

を括弧で囲む必要はありません+1

次のように変更します。

put "${file}" "${7}.T${j}+1"

変数をクォートすることをお勧めします。

別のヒント: の代わりにj=`expr $j + 1`、単純に を使用できます((j++))

于 2012-09-25T10:38:29.250 に答える