• 締切済み

想定外の戻り値に付いて

Linux系OSのシェルスクリプトについて質問です。 スクリプトの内容としては各主要サービスの起動と停止を行う内容になります。 ここでお伺いしたい内容はスクリプトの途中でサービスが起動しているかどうか、grepの戻り値によって処理を変更する場合にgrepの戻り値がどうにもおかしい場合、どのような原因が考えられるか、ということです。 【スクリプト内容(抜粋)】 #!/bin/bash ---中略--- echo "Apache2起動前確認" | tee -a ${LOG} ps -ef | grep apache2 | grep -v "grep" > /dev/null if [ $? == 0 ]; then ---省略--- 上記の内容はapache2を起動する際、apache2が起動していれば処理を中止する内容の一部ですが、当然起動していればpsコマンドで内容が出るのでgrepの戻り値は0になり、「then」の内容が実施されます。 これはこれで完成されているので問題なく稼動します。 しかしこれとまったく同じ内容で、apache2をmysqlに変更したものが問題でこちらが正常に動作しないのです。 【スクリプト内容(抜粋)】 #!/bin/bash ---中略--- echo "MySQL起動前確認" | tee -a ${LOG} ps -ef | grep mysql | grep -v "grep" > /dev/null if [ $? == 0 ]; then ---省略--- これだとなぜか停止しているときに戻り値が「0」、起動しているときに戻り値が「1」になってしまいます。 ifとpsの間に「echo $?」をかませてみても想定外の戻り値がセットされているためif文そのものには間違いはありません。 また、コマンドラインで「ps -ef | grep mysql | grep -v "grep" > /dev/null ; echo $?」を 実施しても戻り値は「1」に(停止している場合)なるのですが、スクリプト上では戻り値「0」がセットされるようです。 何ゆえこのような意図しない動作をするのか考えてもわかりません。 apache2の場合だと正常に動くだけになおわかりません。 因みに停止しているとき、起動しているときでまったく逆の戻り値がそれぞれ返ってきているようです。 どなたか原因がわかる人は教えてください、宜しくお願いいたします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

ん~, if の条件にわざわざ test を使っているのはなぜなんでしょうか. 素直にパイプラインを if の条件に書けばいいだけのように見えるんですが.

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

grep の出力を/dev/nullに捨てずに画面に表示させてみて、停止時に何が一致しているのかを見れば手がかりになるでしょう。

関連するQ&A