[英]Why do I get an extra 0 on my script
我不知道为什么我运行脚本时会得到额外的0
。
这是我的脚本:我运行一个SQL查询并将其保存为valor.txt
文件。
这是我的数组: array=(50 60 70)
Valor.txt
:
count | trn_hst_id | trn_msg_host
-------+------------+--------------
11 | 50 | Aprobada
2 | 70 | Aprobada
(2 rows)
码:
function service_status {
cd
cat valor.txt | grep $1 | gawk '{print $1}' FS="|" | sed "s/ //g"
if [ $? -eq 0 ]; then
echo -n 0
else
echo -n $1
fi
}
echo "<prtg>"
# <-- Start
for i in "${array[@]}"
do
echo -n " <result>
<channel>$i</channel>
<value>"
service_status $i
echo "</value>
</result>"
done
# End -->
echo "</prtg>"
exit
这是我的输出。
<prtg>
<result>
<channel>50</channel>
<value>11
0</value>
</result>
<result>
<channel>60</channel>
<value>0</value>
</result>
<result>
<channel>70</channel>
<value>2
0</value>
</result>
</prtg>
为什么我在这里得到0
? -
<value>2
0</value>
如果我正确理解您的评论,则需要打印计数。 如果存在于valor.txt
,则为count
列的值;如果array
中的valor.txt
不在trn_hst_id
中,则为count
列的值。 这应该工作(尽管未经测试):
function service_status {
val=$(cat ~/valor.txt | grep $1 | gawk '{print $1}' FS="|" | sed "s/ //g")
# ^^ so you don't need to "cd" each time
# Save the value into "$val"
echo -n "${val:-0}" # If there is nothing in $val, print a 0
}
如果$val
包含文本,则"${val:-0}"
序列扩展为"$val"
,否则扩展为文字0
。 如果$1
不在valor.txt
,则$val
将为空,因此您将得到零。 有关更多:-
和朋友如何工作的信息,请参见Wiki 。
“ 0”是echo -n 0
的结果,如果awk
命令正常工作(通常是这种情况),则在函数内部执行该命令。 从代码尚不清楚为什么要这样写。 显然应该从文件中提取某些值,但是'if'条件似乎正在检查错误的东西,我敢打赌'sed'的返回码不是我们想要的。 (更好的候选者将是'grep'的返回码。
所以我会这样写函数:
function service_status {
cd
var=$(cat valor.txt | grep $1 | gawk '{print $1}' FS="|" | sed "s/ //g")
if [ -z "$var" ]; then
echo -n 0
else
echo -n "$var"
fi
}
变量“ var”将包含“搜索命令”的结果。 如果搜索不返回任何值,则'var'将为空,并且'0'将是函数的输出,否则'var'的内容将位于输出中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.