首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取if语句中命令的输出到一个变量中

问获取if语句中命令的输出到一个变量中
EN

Stack Overflow用户
提问于 2019-07-08 18:45:16
回答 2查看 107关注 0票数 0

我需要一个Ansible主机文件中的条目,以一种方式格式化,以便它可以在Linux上的普通主机文件中使用。我可以通过在我的脚本中调用两次nslookup来实现这一点。

我的目标是只调用nslookup一次,但我不知道如何将if语句中的nslookup输出转换为变量。

我已经试过了

代码语言:javascript
复制
if [[ $(nslookup $i > $DNSHOST) && $? == 0 ]]
if [[ $(nslookup $i > $DNSHOST && $? == 0) ]]
if  (($(nslookup $i > $DNSHOST) && $? == 0))
if [[ $("nslookup $i > $DNSHOST") && $? == 0 ]]

...and有很多其他的组合,但都不起作用??

此脚本工作并完成以下工作:

代码语言:javascript
复制
for i in $HOSTS; do

                if [[ $(nslookup $i) && $? == 0 ]]; then

                        nslookup $i | sed -e '1,3d;6d' | cut -d$'\t' -f2 | cut -d ' ' -f2 | xargs -n2 | awk '{print $2,"\t",$1}'

                fi
done

这是我不能去工作的那个:

代码语言:javascript
复制
for i in $HOSTS; do

        if [[ $(nslookup $i > $DNSHOST) && $? == 0 ]]; then

                cat $DNSHOST | sed -e '1,3d;6d' | cut -d$'\t' -f2 | cut -d ' ' -f2 | xargs -n2 | awk '{print $2,"\t\t",$1}'

        fi
done

当我使用双引号时,我得到错误‘目录不存在’。否则,它只是循环遍历主机列表,而不使用nslookup。

EN

回答 2

Stack Overflow用户

发布于 2019-07-08 18:52:23

不是很确定,你想要什么。

但这看起来很奇怪:

代码语言:javascript
复制
if [[ $(nslookup $i > $DNSHOST) && $? == 0 ]]

相反,尝试:

代码语言:javascript
复制
if nslookup $i > $DNSHOST
票数 1
EN

Stack Overflow用户

发布于 2019-07-08 23:02:26

如果您想要捕获nslookup输出,您仍然可以在If命令的条件部分执行此操作:

代码语言:javascript
复制
if output=$( nslookup ... ); then 
    # do something with "$output"
fi

if [[ $(nslookup $i > $DNSHOST) && $? == 0 ]]的问题

表达式有两个: false和$? == 0

  • && -

  • ,因此如果第一个表达式的计算结果为$(nslookup $i > $dnshost),则布尔结果不可能为true,并且第二个表达式不是第一个表达式:
  • 由于只有一个操作数,true/false由操作数
  • 的字符串长度决定。当您将输出重定向到文件中时,命令替换的标准输出结果将是空字符串。
  • 作为表达式的空字符串是false

​

请注意,if命令的条件不必在方括号中。如果您想要编写一个If命令来处理某个命令的退出状态,那么只需编写

if some_command; then ...; else ...; fi

在交互式提示符下:help if、help [[、help test

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

https://stackoverflow.com/questions/56933246

复制
相关文章

相似问题

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