2016-03-29 19 views
0

に私はエラーには私のshスクリプト

Starting jboss-as: /etc/init.d/jboss: line 106: [: -eq: unary operator expected 
を取得SHを使用して、私のサービスのスタートアップスクリプトを記述しようとしているが、次の行

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

とのトラブルを抱えている「単項演算子が期待さ」の取得します

eqの条件が間違っているかどうかはわかりません。何かアドバイス? - Dave

答えて

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 

EDITを使用して、変数空要素を基底に確認することができます両方の組み合わせ:

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

LAST EDIT: は実際にあなたの問題は変数展開を引用ないから来ています:

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

[OK]をクリックします。結合されたステートメントを作成するにはどうすればよいですか? ppid varが空であるかもしれないという事実を考慮に入れるか? – Dave

+0

@Dave編集済みの回答を見る – neric

関連する問題