Json 如何重构这个bash脚本?

Json 如何重构这个bash脚本?,json,bash,curl,Json,Bash,Curl,这是我的第一个脚本,我很难写出尽可能短的代码。您可以在循环中处理变量: 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/ap

这是我的第一个脚本,我很难写出尽可能短的代码。

您可以在循环中处理变量:

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 
编辑:

为了存储变量以供进一步“处理”,您可以在
do
循环中显式创建变量,如下所示:

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

这将创建(并导出)大写变量
STATUS
DOWNLOAD\u URL
,等等。

您可以在循环中处理变量:

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 
编辑:

为了存储变量以供进一步“处理”,您可以在
do
循环中显式创建变量,如下所示:

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


这将创建(并导出)大写变量
STATUS
DOWNLOAD\u URL
,等等。

您刚刚公开发布了您的凭据吗?您应该双引号引用所有变量引用(例如
echo“$exportsData”
),以避免意外的解析问题。欢迎使用StackOverflow!如果您在这个问题中发布了凭据,请注意,即使您已经编辑了凭据,我们这些具有足够高代表性的人仍然可以看到旧版本。您应该轮换这些凭证。IDK如果有什么版主可以做的话,但是我会把它标记为复查。如果你有工作代码并想改进它,考虑在OH中问,并且一如既往,考虑通过你刚刚发布你的凭据来运行你的shell脚本吗?你应该加倍引用所有变量引用(例如<代码>回音】$ExpStsDATA < <代码> >避免意外的解析问题。欢迎使用StackOverflow!如果您在这个问题中发布了凭据,请注意,即使您已经编辑了凭据,我们这些具有足够高代表性的人仍然可以看到旧版本。您应该轮换这些凭证。IDK如果有什么版主可以做的,但是我会把它标记为复查。如果你有工作代码并想改进它,考虑一下在OH中问,并且一如既往地考虑通过谢谢你的一个shell脚本来运行你的shell脚本!您还可以告诉我,如何将if条件设置为if(status==“pending”),对用户定义的变量使用所有大写名称实际上是一种糟糕的做法——这些名称用于对操作系统或shell有意义的变量。请参阅第四段中的相关标准,记住环境变量和shell变量共享一个名称空间。@Frigocate,关于这一点有几点是错误的
=
不是所有shell中的有效字符串比较运算符——标准运算符(当脚本使用ash或dash而不仅仅是bash运行时,它将工作)是
=
。您需要引用
“$STATUS”
(以防止它被字符串拆分和全局展开),而不是
完成的
(无论是否引用,它总是解析为一个单词)。类似地,这里的答案目前存在缺陷,因为它使用
echo$exportsData
而不是
echo“$exportsData”<代码> >或“代码> > FrigoCt,……BTW,以明确的形式获取变量的确切值,请考虑<代码> Prtff '%q= %q\n'状态' $状态/代码>,这将显示您的<代码>状态变量有尾随空白,不可打印的字符,或其他令人惊讶的/有趣的事情正在进行。谢谢!您还可以告诉我,如何将if条件设置为if(status==“pending”),对用户定义的变量使用所有大写名称实际上是一种糟糕的做法——这些名称用于对操作系统或shell有意义的变量。请参阅第四段中的相关标准,记住环境变量和shell变量共享一个名称空间。@Frigocate,关于这一点有几点是错误的
=
不是所有shell中的有效字符串比较运算符——标准运算符(当脚本使用ash或dash而不仅仅是bash运行时,它将工作)是
=
。您需要引用
“$STATUS”
(以防止它被字符串拆分和全局展开),而不是
完成的
(无论是否引用,它总是解析为一个单词)。类似地,这里的答案目前存在缺陷,因为它使用
echo$exportsData
而不是
echo“$exportsData”<代码> >或“代码> > FrigoCt,……BTW,以明确的形式获取变量的确切值,请考虑<代码> Prtff '%q= %q\n'状态' $状态/代码>——这将告诉您,如果您的代码>状态< /代码>变量有尾随空白,不可打印的字符,或其他令人惊讶/有趣的事情正在进行。