2017-12-16 17 views
0
exportsData=$(curl -X GET \ 
-H 'Accept: application/vnd.xxxxx+json; version=3.0' \ 
-H 'Authorization: Bearer RCexxxxxxxxxxxxxxxxxxxxxxxxxcVefI5mWy' \ 
-H 'Content-Type: application/json' \ 
https://api.xxxx.com/apps/9xxxxxxxxx15f96fe/exports) 
status=$(echo $exportsData | jq '.[0].status') 
downloadURL=$(echo $exportsData | jq '.[0].download_url') 
export ENCRYPTED_AES_KEY=$(echo $exportsData | jq '.[0].encrypted_aes_key') 
export AES_IV=$(echo $exportsData | jq '.[0].aes_iv') 

export ENCRYPTED_TARBALL=encryptedChatDump.tar.gz.enc 
$(curl -X GET -o ENCRYPTED_TARBALL \ 
-H 'Accept: application/vnd.xxxxx+json; version=3.0' \ 
-H 'Authorization: Bearer RCexxxxxxxxxxxxxxxxxxxxxxxxxcVefI5mWy' \ 
-H 'Content-Type: application/json' \ 
https://storage.googleapis.com/someUrlWhereTheFileIsBeingDownloadedFrom) 

export OUTPUT_TAR=finalChatDumpUnencrypted.tar.gz 
export PRIVATE_KEY_PATH=~/.ssh/id_rsa 


openssl enc -in $ENCRYPTED_TARBALL -out $OUTPUT_TAR -d -aes-256-cbc | base64 --decode | openssl rsautl -decrypt -inkey $PRIVATE_KEY_PATH | base64 --decode 

Dies ist mein erstes Skript und ich habe es schwer, den kürzest möglichen Code zu schreiben.Wie kann ich dieses Bash-Skript umgestalten?

+4

Haben Sie gerade Ihre Anmeldedaten veröffentlicht? – choroba

+2

Sie sollten alle Variablenreferenzen (z. B. echo "$ exportsData" ') doppelt angeben, um unerwartete Analyseprobleme zu vermeiden. –

+2

Willkommen bei StackOverflow! Wenn Sie Anmeldeinformationen in dieser Frage gepostet haben, beachten Sie bitte, dass auch wenn Sie sie seither bearbeitet haben, die von uns mit genügend Wiederholungen immer noch die alte Version sehen können. Sie sollten diese Anmeldeinformationen rotieren. IDK, wenn Moderatoren etwas können, aber ich werde dies zur Überprüfung markieren. – kojiro

Antwort

3

könnten Sie die Variablen in einer Schleife verarbeiten:

for key in status download_url encrypted_aes_key aes_iv 
do 
    val=$(echo "${exportsData}" | jq ".[0].${key}") 
    echo "${val}" 
done 

EDIT:

, um die Variablen für die weitere "Verarbeitung" zu speichern, könnte man sie explizit in der als do Schleife erstellen:

for key in status download_url encrypted_aes_key aes_iv 
do 
    val=$(echo "${exportsData}" | jq ".[0].${key}") 
    declare -x "$(echo ${key} | tr '[a-z]' '[A-Z]')"="${val}" 
done 

dies schaffen (und Export) in Großbuchstaben Variablen STATUS, DOWNLOAD_URL usw.

+0

Danke eine Tonne @ewcz !! Könnten Sie mir auch sagen, wie ich eine if-Bedingung setzen soll als ob (Status == "pending") – frigocat

+0

Gute Antwort. Außerdem würde ich vorschlagen, dass "jq" mehr von der Arbeit machen kann. Etwas wie 'jq '. [0] | (.status, .download_url, .encrypted_aes_key, .aes_iv)' <<<" $ exportsData "'. Sie können weiter gehen, indem Sie die '@ sh'-Option und' ascii_upcase' verwenden, um den gesamten 'declare'-Ausdruck von' jq' auszugeben. – kojiro

+0

@frigocat mein Vergnügen :) - für String Vergleich, siehe zum Beispiel diese [Antwort] (https://Stackoverflow.com/a/4277753/5351549) oder die Beispiele [hier] (http://tldp.org/LDP /abs/html/comparison-ops.html) – ewcz

Verwandte Themen