猫咪测试
[...] 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 !!)
任何想法的人?!
非常感谢。
答案 0 :(得分:0)
问题是这个条件:
if [ $? ]; then
这将始终返回true,因为它会检查$?
是否为空,这始终为真,因为$?
是0
或1
。
您不需要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