bash写一个循环来运行命令

时间:2012-03-14 00:08:21

标签: bash

问题是这样的:

有一个名为run的脚本,我需要更改run的操作,使run输出的第二个字段为0(请注意:它不是run的输出,但是它的一部分)。我只是不知道如何判断循环的run输出的第二个字段的值。

有没有人有什么好主意?谢谢。

2 个答案:

答案 0 :(得分:3)

请参阅此代码段:

out=$(command | awk '{print $2}')
((out)) || echo "zero detected"

或简单地说:

command | awk '($2 == 0) {print "zero detected"}'

on for for循环:

command | while read a b c d; do
    ((b)) || echo "zero detected"
done

请注意: ((...))是一个算术命令,如果表达式非零,则返回退出状态0;如果表达式为零,则返回1。如果需要副作用(赋值),也可以用作" let"的同义词。见http://mywiki.wooledge.org/ArithmeticExpression

答案 1 :(得分:1)

捕获数组中run的输出并修改第二个元素,如下所示:

res=($(echo 1 2 3 4))
# show whole array
echo ${res[@]}
1 2 3 4
# show element 2 with index 1:
echo ${res[1]}
2
# modify second element:
res[1]=0
# verify modified element:
echo ${res[1]}
0
# verify whole thing:
echo ${res[@]}
1 0 3 4

所以你的命令:

res=($(run))
res[1]=0
# usage of manipulated result:
echo ${res[@]}