首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在后续bash命令中使用bash变量

在后续bash命令中使用bash变量
EN

Stack Overflow用户
提问于 2017-06-20 09:06:43
回答 3查看 85关注 0票数 1

我正在编写一个bash脚本,它显示了对我来说很重要的所有tcp连接。为此,我使用netstat -atp。看起来是这样的:

代码语言:javascript
运行
复制
num_haproxy_443_established=$(netstat -atp | grep ESTABLISHED | grep :https | grep haproxy | wc -l)
printf "\n show ESTABLISHED connections port 443 \n"
printf " %s" $num_haproxy_443_established

在bash脚本中,我有一些这样的调用,现在我想优化它,只调用netstat -atp一次并重用结果。我试过:

代码语言:javascript
运行
复制
netstat_res=$(netstat -atp)

num_haproxy_443_timewait=$("$netstat_res" | grep TIME_WAIT | grep :https | grep haproxy | wc -l)
printf " %s" $num_haproxy_443_timewait

执行脚本后,我总是得到0: command not found作为错误消息。如何使用$(.)中的变量?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-20 09:11:50

如果您有类似于A="foo"的内容,那么$("$A")将被解析为在子subshell中调用程序foo

因此,您只需回显变量的内容,然后从它返回grep:

代码语言:javascript
运行
复制
num_haproxy_443_timewait=$(echo "$netstat_res" | grep TIME_WAIT ...)
票数 1
EN

Stack Overflow用户

发布于 2017-06-20 09:17:10

可以使用shell数组存储netstat命令:

代码语言:javascript
运行
复制
# your netstat command
netstat_res=(netstat -atp)

# then execute it as
num_haproxy_443_timewait=$("${netstat_res[@]}" |
awk '/TIME_WAIT/ && /:TIME_WAIT/ && /haproxy/{++n} END{print n}')

echo $num_haproxy_443_timewait

还请注意如何通过单个grep调用避免多个awk调用。

相关常见问题解答我试图在变量中放置一个命令,但是复杂的情况总是失败的!

票数 1
EN

Stack Overflow用户

发布于 2017-06-20 09:16:08

在您的情况下,$netstat_res是结果,而不是命令,如果您想保存结果并使用它不止一次,将结果保存到文件是更好的方法,如:

代码语言:javascript
运行
复制
    netstat -atp > /tmp/netstat_status.txt
    num_haproxy_443_timewait=$(cat /tmp/netstat_status.txt | grep TIME_WAIT | grep :https | grep haproxy | wc -l)
    printf " %s" $num_haproxy_443_timewait
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44648604

复制
相关文章

相似问题

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