2011-10-27 54 views
5

Đây là mã cho foobar.sh tôi:Trong khi Do Statement với trống/grep trống trở lại?

!#/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 

tôi về cơ bản chạy một vòng lặp infinate mà sẽ thực hiện lệnh X một lần một quá trình được giám sát đã kết thúc nhưng tôi cuối cùng nhận được thông báo sau khi vòng kịch bản của tôi :

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

có cách nào làm cho kịch bản chấp nhận rằng không phản hồi sẽ kích hoạt 'Then' tuyên bố của tôi và thực hiện lệnh X vì nó không được thích các phương pháp hiện hành.

Trả lời

9

Thay vì

if [ "$pid"="" ] 

hãy thử

if [ "$pid" = "" ] 

Khoảng trắng là khoảng = là quan trọng.

Bạn cũng cabn thử

if [ -z "$pid" ] 
+0

Tuyệt vời cảm ơn bạn rất nhiều! – bikerben

3

Tôi muốn làm

while pgrep -fl "mylittleprogram"; do sleep 6; done 
exit # process has ended 

(pgrep là trong gói psmisc IIRC)

Tôi vừa thử nghiệm nó. Bạn có thể chuyển hướng đầu ra của pgrep đến /dev/null nếu bạn muốn chờ đợi để im lặng. Thêm một số gia vị hơn để làm cho mọi việc liên tục:

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

Các thử nghiệm zero là if [ -z "$pid" ]

0

Thay vì các khớp mơ hồ được cung cấp bởi:

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

... và cú pháp backtick cổ xưa, xem xét việc này khớp với tên cơ sở quy trình chính xác và tạo ra định dạng đầu ra mà bạn chọn (ở đây, quá trình pid nếu nó tồn tại):

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

Sau đó, như đã nói, chỉ cần kiểm tra một giá trị rỗng:

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

Các dấu bằng sau tên phần tử đầu ra ngăn chặn tiêu đề mà bạn thường nhận được. Manpages là bạn của bạn.

Các vấn đề liên quan