这不是一个特别困难的问题,但我开始在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