0

私は次のシェルスクリプトを書きました:

#!/bin/ksh
main()
{
    echo 'Checking if process is running...'
    if [ [ps -ef|grep "Djava.security.auth.login.config"|grep -v grep|wc -l] != 0 ]; then
            echo "startEventProcessorScript is not running"
            nohup /apps/fasigw/test/bin/startEventProcessor &
    fi

    echo '******************************************************************'
    echo ' Script started successfully '
    echo '******************************************************************'
}
main $*

上記のスクリプトを実行すると、次のエラーメッセージが表示されます。

Checking if process is running...
main[3]: test: ] missing
wc: illegal option -- ]
usage: wc [-c|-m] [-lw] [name ...]

この問題を修正できません。startEventProcessorは、パス/ apps / fasigw / test/binにあるスクリプトです。助けてください

4

1 に答える 1

3

ifステートメント内でコマンドの出力を取得するには、コマンド置換を使用する必要があります。つまり、$(...)の代わりに使用し[..]ます。

if [ $(ps -ef|grep "Djava.security.auth.login.config"|grep -v grep|wc -l) != 0 ]

これは次のように簡略化できることに注意してください。

if [ $(pgrep -cf "Djava.security.auth.login.config") != 0 ]

また :

if ps -ef | grep -q "[D]java.security.auth.login.config"; then

(括弧内の括弧は"[D]java..."、grep コマンドがそれ自体のプロセスと一致しないようにするためによく使用されるトリックです)。

于 2013-01-16T09:44:49.403 に答える