请向我解释为什么最后的“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循环,创建一个子shell来运行while循环。
现在这个子进程有它自己的环境副本,不能通过任何
变量回到其父(如在任何unix进程中)。
现在这个子进程有它自己的环境副本,不能通过任何
变量回到其父(如在任何unix进程中)。
因此,你需要重组,以便你不会陷入循环。
或者,你可以在一个函数中运行,例如,回显你的值
想从子进程返回。