在脚本中测试grep输出

时间:2015-11-28 16:55:25

标签: bash grep

猫咪测试

[...] tcp        0      0 172.16.32.34:46783      1xx.2xx.1xx.131:443 
ESTABLISHED 1000       2101052     18904/skype   [...]

我测试是否存在skype,获取相应的进程:

!/bin/bash

grep skype test 
if [ $? ]; then

k=$(grep skype test | awk '{print $(NF)}'|grep -o '[0-9]+')

echo "got skype pid"

else

echo "skype is not running";

fi    
exit 0

当grep发现' skype'一切都很好。

什么时候找不到' skype'我们还有#34;得到了skype pid"。

看起来像$?在脚本中运行时总是== 0。 如果我运行echo $?运行脚本后,我得到了0

如果我手动完成,它可以正常工作:

cat test 

[...] tcp        0      0 172.16.32.34:46783     
191.235.128.131:443     ESTABLISHED 1000       2101052     18904/anything    [...]

grep skype test -> no output 

echo $? -> 1 (it works !!)

任何想法的人?!

非常感谢。

1 个答案:

答案 0 :(得分:0)

问题是这个条件:

if [ $? ]; then

这将始终返回true,因为它会检查$?是否为空,这始终为真,因为$?01

您不需要grep,您可以在awk内完成所有操作:

if awk -v s='skype' -F '[/[:blank:]]' '{exit $NF!=s}' test; then
   echo "got skype pid"
else
   echo "skype is not running"
fi
相关问题