首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将输出从命令作为参数传递给另一个(复杂的)?

如何将输出从命令作为参数传递给另一个(复杂的)?
EN

Stack Overflow用户
提问于 2022-02-03 04:57:56
回答 1查看 193关注 0票数 0

我试图在某种程度上自动化F5设备上的证书包更新。没有一个命令可以检查SSL包是否过期,并将其与服务器SSL配置文件名称匹配。因此,我试图使用greps (正如我所知道的那样)执行以下两个命令:

  1. tmsh -c "cd /;list sys file ssl-cert recursive is-bundle expiration-string" | grep true -B 2 | grep "2018 GMT\|2019 GMT\|2020 GMT\|2021 GMT\|2022 GTM" -B 1 | grep ssl-cert | awk -F[\ \{] '{print $4}'

这将给出一个过期包名的输出,每行一个,如下所示

代码语言:javascript
复制
Common/somebundle.crt
Common/someotherbundlename.crt
Common/whoknowswhatthisbundleisfor.crt

  1. tmsh -c 'cd /;list ltm profile server-ssl recursive ca-file chain'

此命令将获得所有服务器-ssl配置文件名称的列表及其到certs/bundle等的链接。我使用| grep Common/somebundle.crt -B 1只向我提供命令1输出中特定输出的信息。因此命令2变成:tmsh -c 'cd /;list ltm profile server-ssl recursive ca-file chain' | grep Common/somebundle.crt -B 1,然后我必须手动重复命令1输出中找到的每个包。

我试图以某种方式使用命令1,然后使用xargs (或我可以运行的任何东西)来运行命令2,将输出从1传递到2中的grep中。

它不一定非得是一行,我只是不知道bash能不能写一个脚本。

我创造了一些有用的东西,虽然看起来不太干净

代码语言:javascript
复制
for i in $(tmsh -c "cd /;list sys file ssl-cert recursive is-bundle expiration-string" | grep true -B 2 | grep "2018 GMT\|2019 GMT\|2020 GMT\|2021 GMT\|2022 GTM" -B 1 | grep ssl-cert | awk -F[\ \{] '{print $4}'); do echo -n "$i -> "; tmsh -c "cd /;list ltm profile server-ssl recursive" | grep -B20 $i  >> /dev/null || echo "Not Found" && tmsh -c "cd /;list ltm profile server-ssl recursive" | grep -B20 $i |grep -i "ltm profile" | tail -n1 | awk -F "{" '{print $1}' ; done
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-09 06:11:20

使用bash while循环和read函数应该是可能的。您可以将第一个命令导入while循环,逐行读取输出:

代码语言:javascript
复制
tmsh -c "cd /;list sys file ssl-cert recursive is-bundle expiration-string" | grep true -B 2 | grep "2018 GMT\|2019 GMT\|2020 GMT\|2021 GMT\|2022 GTM" -B 1 | grep ssl-cert | awk -F[\ \{] '{print $4}' | while read bundle;do tmsh -c 'cd /;list ltm profile server-ssl recursive ca-file chain' | grep "$bundle" -B 1 |...do whatever else is needed ;done

它还可以拆分成正常的多行脚本:

代码语言:javascript
复制
tmsh -c "cd /;list sys file ssl-cert recursive is-bundle expiration-string" | grep true -B 2 | grep "2018 GMT\|2019 GMT\|2020 GMT\|2021 GMT\|2022 GTM" -B 1 | grep ssl-cert | awk -F[\ \{] '{print $4}' | while read bundle
do 
echo "===== $bundle ===="
tmsh -c 'cd /;list ltm profile server-ssl recursive ca-file chain' | grep "$bundle" -B 1 |...do whatever else is needed 

done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70966133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档