2016-09-15 63 views
0

您好,我對shell腳本世界很陌生,並且遇到了幾個問題。我正在編寫一個調用兩個AWS S3存儲桶的bash腳本,並列出了已上傳的最新文件。 從長遠來看,必須下載這兩個文件,並使用CLI複製到RDS PostgreSQL數據庫中的2個現有表。 到目前爲止,這是我所:列表S3使用Bash腳本存儲最新的文件

#!/bin/bash 


printf "Looking up newest files added...\n"; 

AUTO= $(aws s3 ls bucketx --recursive | sort | tail -n 1| awk '{print $4}'); 
IMMO= $(aws s3 ls buckety --recursive | sort | tail -n 1 | awk '{print $4}'); 

echo AUTO; 
echo IMMO; 

問題是,這就是我不明白,當我執行的AWS在終端直接命令,並順利的話和行爲的方式應。但在腳本中,我得到以下錯誤:

Looking up newest files added... 
./shellTest.sh: line 6: bucketx/14.9.2016.csv: No such file or directory 
./shellTest.sh: line 7: buckety/14.9.2016.csv: No such file or directory 

有人能告訴我我做錯了什麼嗎?這是一個邏輯問題還是「只是」一個語法問題? 我期待「回聲」命令剛剛打印出來的變量x和y的內容,而是沒有打印..

乾杯

回答

2

要在AUTO什麼是最新的鍵的值所以你需要有一個字符串

AUTO="$(aws s3 ls bucketx --recursive | sort | tail -n 1| awk '{print $4}')" 
IMMO="$(aws s3 ls buckety --recursive | sort | tail -n 1 | awk '{print $4}')" 

所以AUTOIMMO將持有的值(密鑰字符串值) - 如果你忽略了報價,系統將嘗試找到參考,並抱怨文件本地不存在

要顯示,那麼你需要有

echo $AUTO 
echo $IMMO 

見下文

值。這一個不工作

$ AUTO= $(aws s3 ls <bucket> --recursive | sort | tail -n 1| awk '{print $4}'); 
-bash: database/instantclient-sdk-linux.x64-11.2.0.4.0.zip: No such file or directory 

但是這一次是確定

$ AUTO="$(aws s3 ls <bucket> --recursive | sort | tail -n 1| awk '{print $4}')" 
$ echo $AUTO 
database/instantclient-sdk-linux.x64-11.2.0.4.0.zip 
+0

哼哼..這很奇怪,因爲當我進行更改(使用引號)時,它在本地適用於我,而我有sa我錯誤報告,當我沒有報價(使用你的代碼) –

+0

需要刪除腳本中的分號,固定我的消息 –

+0

這是一個bash的東西?剛剛檢查,我正在運行GNU bash,版本4.2.46(1)-release(x86_64-redhat-linux-gnu)BTW allready刪除了分號,錯誤仍然存​​在 –