2015-11-28 123 views
1

貓測試,如果Skype的存在測試grep的輸出

[...] tcp  0  0 172.16.32.34:46783  1xx.2xx.1xx.131:443 
ESTABLISHED 1000  2101052  18904/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'時,我們仍然有「得到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

問題是這樣的條件:

if [ $? ]; then 

,因爲它會檢查是否$?不爲空這始終是真實的,因爲$?或者是01這將始終返回true。

你不需要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 
+2

因此,使用pgrep的Skype? – c4f4t0r

+0

當然,這將檢查再次運行的進程,但它似乎OP已經有一個名爲'測試' – anubhava

+0

感謝Anubhava文件。我試過[$?== 0]而不是[$? ]但這並沒有改變這個問題。 –