2016-03-29 33 views
0

Ben sh kullanarak hizmet için bir başlangıç ​​senaryo yazmaya çalışıyorum amaAlma benim sh komut "tekli operatör beklenen"

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

Ben hatayı olsun aşağıdaki satırı ile sorun yaşıyorum

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

Eşit koşulda neyin yanlış olduğunu anlatamam. Herhangi bir tavsiye? - ppid değişkeni boş olduğunda, hatayı yeniden üretebilmemin tek yolu şudur:

cevap

1

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

Sen

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

DÜZENLEMEYİ kullanılarak değişken Emptyness kontrol edebilirsiniz: birleştirmek uzun:

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

SON DÜZENLEME: Aslında senin sorunun değişken genişleme alıntı değil geliyor :

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

bakınız # 5: http://fahdshariff.blogspot.co.uk/2013/10/shell-scripting-best-practices.html#BP5

+0

Ok. Kombine bir ifadeyi nasıl yazıyorsunuz - ör. ppid var boş olabileceği gerçeğini dikkate alarak? – Dave

+0

@Dave düzenlenmiş cevabı gör – neric