1. ホーム
  2. バッシュ

[解決済み】Bash: 1行でIf/Else文

2022-04-06 23:27:47

質問

あるプロセス(以下、プロセス名とする)が、そのプロセスで使用されているソフトウェアと同じかどうかを確認しようとしています。 some_process ) がサーバー上で実行されていることを示します。もし実行中であれば、echo 1、そうでなければ echo 0。

これは私が使っているコマンドですが、部分的にしか動作しません(詳細は後述します)。スクリプトを一行で書く必要があることに注意してください。

ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi

[s]some_proces[s] を防ぐためです。 grep が自分自身を返さないようにする。

もし some_process が実行されている場合 "1" がエコーされるので、それはそれで問題ありません。しかし、もし some_process が実行されていない場合は、何もエコーされません。

解決方法は?

を明示的にチェックする必要はありません。 $? . ただ、そうしてください。

ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0 

これは、echoが失敗しないことに依存していることに注意してください。 より信頼性の高い書き方としては

if ps aux | grep some_proces[s] > /tmp/test.txt; then echo 1; else echo 0; fi