これは特に難しい問題ではありませんが、私はBashから始めていますが、いくつかのことが私を立ち上げています。私はAWS S3へのいくつかのバックアップを自動化しようとしていますが、それに少しのロジックも追加しています。私はこのようにしてコーディングしたい:Bashでロジックの返された出力をキャプチャ
- ユーザーは、彼らがスクリプトを呼び出すときに、コピーしたいもの
$FOLDER
経過していることを確認し、そうでない場合は、警告して終了バケットが存在する場合sh backup.sh logfolder
- チェックすなわち、バケット名であることサーバー
- バケットが指定した地域のS3バケットへ
$FOLDER
と$FOLDER
からファイルを移動し、存在し、 - 上の他の動きを警告して作成されない場合の
$HOSTNAME
常にコマンドaws s3 mb s3://$HOSTNAME
を実行するための簡単な方法が、これは、それはそう他、aws s3 ls s3://$HOSTNAME
のようなものを実行すると、出力がNoSuchBucketが、その後バケットを作成する含まれている場合に存在するほぼすべての状況下として無駄な縫い目(バケットがある)、その後の動きonをmoveコマンドに渡します。
2> &1
を使用し、変数名$1
でこれを呼び出すことができましたが、最初に$1
を使用して開始時にフォルダ名を渡しています。私が持っていたもう一つの問題は、コマンドを実行してから出力をチェックすることでした。私はコマンドである変数を作成しますか?あるいは、コマンドを実行して出力を変数に入れ、出力を検索しますか? $ 1 = NoSuchBucketその後、バケツ、他のコピーファイルを作成する場合、すなわち何か1または2
1)BUCKETCHECK=$(aws s3 mb s3://$HOSTNAME/) 2> &1
$ 1 = NoSuchBucket場合は、aws s3 ls s3://$HOSTNAME/ 2> &1
)、それ以外のコピーファイル
2のバケットを作成
2つのどちらも正しいとは限りませんか?
スクリプト:
REGION="eu-west-1"
FOLDER=$1
# Debug Code
DEBUG=0
if [ ${DEBUG} = 1 ]
then
echo ${HOSTNAME}
echo ${FOLDER}
echo ${REGION}
fi
# Get function from functions library
#. /etc/init.d/functions
if [ ${FOLDER} = 0 ]
then
echo "Please input a folder name"
exit 1
BUCKETCHECK=$(aws s3 ls s3://$HOSTNAME/ 2>&1)
elif [ ${BUCKETCHECK} = "An error occurred (NoSuchBucket) when calling the ListObjects operation: The specified bucket does not exist" ]
then
echo "Creating Bucket"
aws s3 mb s3://${HOSTNAME}/
#elif [ ${FOLDERCHECK} = 0 ]
#then
# echo "Folder does not exist, will create it"
# aws s3 cp ${FOLDER} s3://${HOSTNAME}/${FOLDER}/
else
echo "Bucket does exist, moving files"
aws s3 mv ${FOLDER} s3://$HOSTNAME/${FOLDER}/ --recursive --region ${REGION}
fi
おかげで、私はあなたが私の混乱についての権利だと思います。あなたが送ったコマンドはまだ動作しませんが、私はそれが私に正しい方向へのプッシュを与えていると思います。ありがとう – CodeChris
それでは、コマンドは単に "NoSuchBucket"以上のものを出しているかもしれません。おそらくあなたはあなたのスクリプトを提供することができ、あなたはさらなる支援のためにどんな出力を得ているのでしょうか。 – Markus
ですが、出力されるテキスト文字列全体を追加しました。私はスクリプトを投稿し、その後エラーが発生します。 これらのエラーは、最初のフォルダのIFと最初のELIFに対応しています。 s3backup.sh:行30:[:=:単項演算子の期待値 s3backup。sh:行35:[:=:単項演算子が期待しています それ以外の場合は、「バケットは存在します」と表示されますが、チェックしたとおりではないので、バケットチェックセクションが好きではありません。それ以外の場合は – CodeChris