2012-02-17 39 views
2

相對較新比的bash腳本其他任何東西,我創建了一個腳本來如果或者當某個進程在運行裏面

  • 檢查的情況下命令的位置參數循環
  • 輸出PID對外殼
  • 如果不提示用戶輸入並啓動etc/etc,則爲

我移動到位置參數並不能看到我要去哪裏錯了:

if [ "$1" == "" ]; then 
    proc_finder 
elif [ $1 != "" ];then 
    case $1 in 
     -p | --process) 
     shift 
     z=$(ps aux |grep $1 |grep -v grep > /dev/null) 
     if [ ! -z "$z" ]; then 
      echo "YES" 
     else 
      echo "NO" 
     fi 
    ;; 
    *) 
     echo "Usage -p (process)" 
    esac 
fi 

這似乎總是在-p test例如將何時返回yes均勻。我知道我做了一些根本性的錯誤,看着詳細的輸出grep -v grep是最後完成,因此我相信它總是返回退出狀態0.

+1

'ps aux | grep $ 1 |如果可能的話,grep -v grep'應該簡化爲'ps -C $ 1',至少Linux ps能夠這樣做。 – 2012-02-19 10:30:50

回答

1

不應該是if [ $? -eq 0 ]

編輯1

你可以試試這個:

z=`ps aux | grep $1 | grep -v grep > /dev/null` 
if [ ! -z "$z" ]; then 
    echo "YES" 
else 
    echo "NO" 
fi 

如果$z不爲空(-z:測試零長度字符串),這意味着該過程與ps命令找到。

編輯2

ps ... grep ... grep正在重定向到/dev/null。這意味着z將不包含任何內容。刪除重定向和z應該有一些輸出。

z=`ps aux | grep $1 | grep -v grep` 

編輯3

或者,你可以這樣做:

ps aux | grep $1 | grep -v grep > /dev/null 2>&1 
if [ $? -eq 0 ]; then 
    echo "YES" 
else 
    echo "NO" 
fi 

在這種情況下,你是不是保存grep的輸出。如果你不需要它,那很好。

+0

爲什麼在'grep -v grep'調用之後你有一個管道'|'? 什麼是'$ z'意味着要自己做所有事情?這將永遠返回0 – 2012-02-17 23:20:01

+0

好點,刪除但仍然相同 – user1217286 2012-02-17 23:23:11

+0

你可以編輯你的代碼來反映你所做的改變嗎? – 2012-02-17 23:25:43

相關問題