加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash变量范围

发布时间:2020-12-15 16:47:26 所属栏目:安全 来源:网络整理
导读:请向我解释为什么最后的“echo”语句是空白的?我期望它在while循环中增加到值1: #!/bin/bashOUTPUT="name1 ip ip status" # normally output of another command with multi line outputif [ -z "$OUTPUT" ]then echo "Status WARN: No messages from SMcl
请向我解释为什么最后的“echo”语句是空白的?我期望它在while循环中增加到值1:
#!/bin/bash
OUTPUT="name1 ip ip status" # normally output of another command with multi line output

if [ -z "$OUTPUT" ]
then
        echo "Status WARN: No messages from SMcli"
        exit $STATE_WARNING
else
        echo "$OUTPUT"|while read NAME IP1 IP2 STATUS
        do
                if [ "$STATUS" != "Optimal" ]
                then
                        echo "CRIT: $NAME - $STATUS"
                        echo $((++XCODE))
                else
                        echo "OK: $NAME - $STATUS"
                fi
        done
fi

echo $XCODE

我试过使用下面的语句,而不是XCODE方法

XCODE=`expr $XCODE + 1`

并且它也不会在while语句之外打印。我想我缺少一些关于变量范围在这里,但是人的页面不显示它。

因为你是管道到while循环,创建一个子shell来运行while循环。
现在这个子进程有它自己的环境副本,不能通过任何
变量回到其父(如在任何unix进程中)。

因此,你需要重组,以便你不会陷入循环。
或者,你可以在一个函数中运行,例如,回显你的值
想从子进程返回。

http://tldp.org/LDP/abs/html/subshells.html#SUBSHELL

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读