2016-03-29 37 views
0

我想用sh寫爲我服務的啓動腳本,但具有以下行獲得「一元運算符預期」在我sh腳本

#!/bin/sh 
… 
if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then 

我得到的錯誤麻煩

Starting jboss-as: /etc/init.d/jboss: line 106: [: -eq: unary operator expected 

我不能說有什麼問題的eq條件。有什麼建議? - 戴夫

回答

1

我可以重現您的錯誤的唯一方法是當ppid變量爲空。

#! /bin/sh 

ppid='' 


if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then 
    echo running; 
else 
    echo not running; 
fi 

可以使用

if [ -z "$ppid" ]; then 
    echo "ppid is empty;" 
fi 

編輯檢查變量emptyness:二者結合起來:

#! /bin/sh 

ppid= 


if [[ ! -z "$ppid" && $(ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null) -eq '1' ]]; then 
    echo running; 
else 
    echo not running or pid null; 
fi 

最後編輯時間: 其實你的問題是由於沒有引用變量擴展:

#! /bin/sh 

ppid= 


if [ $(ps --pid "$ppid" 2> /dev/null | grep -c "$ppid" 2> /dev/null) -eq '1' ]; then 
    echo running; 
else 
    echo not running or pid null; 
fi 

見#5:http://fahdshariff.blogspot.co.uk/2013/10/shell-scripting-best-practices.html#BP5

+0

確定。你如何撰寫綜合聲明 - 例如考慮到ppid var可能爲空的事實? – Dave

+0

@Dave查看編輯答案 – neric