我想运行一个命令,它提供以下输出并解析它:
[VDB VIEW]
[VDB] vhctest
[BACKEND] domain.computername: ENABLED:RW:CONSISTENT
[BACKEND] domain.computername: ENABLED:RW:CONSISTENT
...
我只对一些关键作品感兴趣,例如'ENABLED'等。我不能只搜索ENABLED,因为我需要一次解析每一行。
这是我的第一个剧本,我想知道是否有人可以帮助我?
编辑: 我现在有:
cmdout=`mycommand`
while read -r line
do
#check for key words in $line
done < $cmdout
我认为这样做了我想要的但是它似乎总是在命令输出之前输出以下内容。
./ myscript.sh:29:无法打开...:没有这样的文件
我不想写文件来实现这一点。
这是psudo代码:
cmdout=`mycommand`
loop each line in $cmdout
if line contains $1
if line contains $2
output 1
else
output 0
答案 0 :(得分:5)
错误的原因是
done < $cmdout
认为$cmdout
的内容是文件名。
您可以这样做:
done <<< $cmdout
或
done <<EOF
$cmdout
EOF
或
done < <(mycommand) # without using the variable at all
或
done <<< $(mycommand)
或
done <<EOF
$(mycommand)
EOF
或
mycommand | while
...
done
但是,最后一个创建了一个子shell,当循环退出时,循环中设置的所有变量都将丢失。
答案 1 :(得分:3)
答案 2 :(得分:0)
$ cat test.sh
#!/bin/bash
while read line ; do
if [ `echo $line|grep "$1" | wc -l` != 0 ]; then
if [ `echo $line|grep "$2" | wc -l` != 0 ]; then
echo "output 1"
else
echo "output 0"
fi
fi
done
USAGE
$ cat in.txt | ./test.sh ENABLED RW
output 1
output 1
这不是最好的解决方案,但它可以逐字翻译你想要的东西,并且应该给你一些开始并添加你自己的逻辑