2011-10-27 12 views
5

これは私のfoobar.shのコードです:空文字/空白のgrepでDo Statementを返しますか?

!#/bin/bash 
while [ 1 ] 
do 
    pid=`ps -ef | grep "mylittleprogram" | grep -v grep | awk ' {print $2}'` 
    echo $pid 
    if [ "$pid"="" ] 
    then 
      echo "Process has ended lets get this show on the road..." 
      exit 
    else 
      echo "Process has not ended yet" 
    fi 
    sleep 6 
done 

私は基本的には、監視対象のプロセスが終了した後、コマンドXを実行しますinfinateループを実行していますが、私は私のスクリプトのループとして、次のメッセージが出てしまいます:

./foobar.sh: line 7: [: missing `]' 
Process has not ended yet 

スクリプトを作る方法はありますが、それは現在のメソッドを好きされていないため、ゼロフィードバックが私の「その後」ステートメントをトリガし、コマンドXを実行することを受け入れます。

答えて

9

代わり

if [ "$pid"="" ] 

の空白が =が重要であるの周りにある

if [ "$pid" = "" ] 

してみてください。あなたがゼロテストがif [ -z "$pid" ]

+0

非常にありがとう! – bikerben

3

私は

​​

(のpgrepパッケージpsmisc IIRCである)

私はちょうどそれをテストしてみたんだろう。待っていることを知らせたい場合は、pgrepの出力を/dev/nullにリダイレクトすることができます。物事が無停電作るためにいくつかのより多くのスパイスを追加します。

{ 
    trap "" INT 
    while pgrep -fl "mylittleprogram" >/dev/null 
    do 
     sleep 6 
    done 
    true 
} && exit 
1

試みるもcabn

pid=`ps -ef | grep "mylittleprogram" | grep -v grep | awk ' {print $2}'` 

...と古風なバッククォート構文、これを考えますこれはプロセスのベース名と正確に一致し、選択した出力形式(ここでは、プロセスpidが存在する場合)を生成します。

pid=$(ps -C mylittleprogram -opid=) 

その後、述べたように、単純に空の値をテスト:

[ -z "${pid" ] && echo "no process" || echo "I live as $pid" 

出力要素名に続く等号を使用すると、通常はなるだろう見出しを抑制します。マンページはあなたの友人です。

0

代わりに漠然としたマッチングのによって提供される

if [ -z "$pid" ] 
関連する問題