這不是一個特別困難的問題,但我開始在Bash中,有幾件事情讓我絆倒。我正在嘗試將一些備份自動化到AWS S3,同時也爲其添加了一些邏輯。我想要的代碼如下所示:在Bash中捕獲邏輯的返回輸出
- 確保用戶通過他們想要的東西
$FOLDER
調用腳本的時候複製,如果沒有,警告和退出,即如果桶中存在sh backup.sh logfolder
- 檢查,鬥名稱爲服務器
- 如果桶不存在,警告和創造,對
- 其他移動從本地
$FOLDER
到S3存儲和$FOLDER
指定移動文件的$HOSTNAME
一個簡單的方式來總是運行命令aws s3 mb s3://$HOSTNAME
,但這接近浪費,因爲幾乎在任何情況下,它會存在如此運行的東西,如aws s3 ls s3://$HOSTNAME
,如果輸出包含NoSuchBucket然後創建桶,否則(水桶在那裏),然後移動在移動命令上。
我看過我可以使用2> &1
,然後用變量名稱$1
調用它,但是我已經使用$1
在開始時傳遞文件夾名稱。我遇到的另一個問題是如何運行命令,然後檢查輸出。我會創建一個變量,這是命令嗎?或者只是運行該命令並將輸出放入一個變量,然後搜索輸出?即東西1或2
1)BUCKETCHECK=$(aws s3 mb s3://$HOSTNAME/) 2> &1
如果$ 1 = NoSuchBucket然後創建桶,否則文件拷貝
2)aws s3 ls s3://$HOSTNAME/ 2> &1
如果$ 1 = NoSuchBucket然後創建桶,否則複製文件
或者也許這兩個都不正確?
腳本:
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
它是,但我添加了輸出的整個文本字符串。我會發布腳本,然後發生錯誤; 這給出了這些錯誤,它們對應於第一個文件夾和第一個ELIF中的IF。s3backup.sh:第30行:[:=:一元運算符預期 s3backup。sh:第35行:[:=:一元運算符預期 如果接着回到else和echo「Bucket does exist」否則,我推測 – CodeChris