0
#!/bin/bash
value=$(</var/www/sym_monitor/man_mon.txt)
value2=$(</var/www/sym_monitor/panel_mon.txt)

pro=$(ps -ef |grep sym |grep -v grep |awk '{ print $2 }')
echo "$pro";
echo "STARTED";

if [ "$value" == "false" ]; then


 cd /var/www/symmetric-ds-3.1.6/bin;
sleep 30;
(sudo ./sym --port 8082 --server);
 #(sudo /bin/bash /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server);

echo "IF";


else 
if [ "$value2" == "false" ]; then


 cd /var/www/symmetric-ds-3.1.6/bin;
sleep 30;
(sudo ./sym --port 8082 --server);
 #(sudo /bin/bash /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server);
echo "ELSEIF";

else
if[ "$pro" == "" ]; then

echo "pro";
 cd /var/www/symmetric-ds-3.1.6/bin;
sleep 30;
(sudo ./sym --port 8082 --server);
fi
fi
fi


echo "END";

上記のスクリプトでは、最後の else if で構文エラーが発生しています。何か案が?いくつかのプロセス ID を実行しているプロセスが印刷されていないにもかかわらず、変数 $pro で? なぜ?

そのスクリプトが以下のようになる前は、まったく問題なく動作していました。

#!/bin/bash
    value=$(</var/www/sym_monitor/man_mon.txt)
    value2=$(</var/www/sym_monitor/panel_mon.txt)

 if [ "$value" == "false" ]; then

     cd /var/www/symmetric-ds-3.1.6/bin;
    sleep 30;
    (sudo ./sym --port 8082 --server);
     #(sudo /bin/bash /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server);


    elif [ "$value2" == "false" ]; then

     cd /var/www/symmetric-ds-3.1.6/bin;
    sleep 30;
    (sudo ./sym --port 8082 --server);
     #(sudo /bin/bash /var/www/symmetric-ds-3.1.6/bin/sym --port 8082 --server);

    fi

これは、完全に正常に機能したスクリプトの最初のバージョンです。しかし、もう 1 つの条件を追加する必要があります。それは、上記の最初のスクリプトで述べたようにプロセスが実行されていない場合、条件のコードを実行する必要があるということです。プロセスが実行されていないにもかかわらず、$pro 値にいくつかの数値が与えられている理由がわかりません。何か案が?

4

1 に答える 1

7

"if と "[" の間には のようにスペースが必要if [です (行番号 31 を確認してください)
そのような間違いを避けるために読むman bash

于 2013-02-28T05:13:09.000 に答える