プロセスを確認し、実行中のプロセスを終了します。

プロセスを確認し、実行中のプロセスを終了します。

プロセスが実行中かどうかを知りたいです。実行している場合は、スクリプトを呼び出すか、何かを印刷したいと思います。以下を試しましたが、構文エラーまたはコマンドが見つかりませんエラーが発生します。

APP_ID = ps -eaf | grep -i `whoami` | grep -i <process_name> | grep -i java | awk '{print$2}'

if[''!= '${APP_ID}'] then
    echo "Stopping instance $APP_ID"

私が得た結果は次のとおりです。

test.sh: line 15: APP_ID: command not found
test.sh: line 17: if[!= ${APP_ID}]: command not found
Stopping instance 

上記のスクリプトにはどのような問題がありますか?エラーがある場合はecho条件付きで印刷するのはなぜですかif

以下のスクリプトも失敗します。test.sh: line 3: [ps: command not found

if [ps -eaf | grep -i `whoami` | grep -i <process_name> | grep -i java]; then
    echo 'stop'
fi

ベストアンサー1

構文には多くの問題があります。

  • 変数を設定するときは、「=」の周囲のスペースを削除してください。

    無効:

    APP_ID = value
    

    正しい:

    APP_ID=value
    
  • プログラムを実行し、その出力を変数に入れるには$(...)(bashで好み、shでは使用できません)、またはバックティック`command`(bashとshでサポート)が必要です。 (変数を割り当てるときは引用符は必要ありませんが、他の場合は重要であることに注意してくださいcommand "$(command)"。:)

    無効:

    APP_ID=command
    

    正しい:

    APP_ID=$(command)
    
  • 「[」を使用する場合は、すべての項目の周りにスペースを追加し、「]」の後にはセミコロンまたは改行文字が必要です。これは、「[」がbash組み込みコマンドであり、組み込みコマンドを「test」とも呼ばれ(参考資料を参照man test)、他のコマンドと同様に、引数がスペースで区切られているためです。

    無効:

    if[x!= y] then echo hello world fi
    

    正しい:

    if [ x != y ]; then echo hello world; fi
    
  • 変数を拡張するには、一重引用符の代わりに二重引用符を使用してください。

    無効:

    if [ '' != '${APP_ID}' ]; then
    

    正しい:

    if [ '' != "${APP_ID}" ]; then
    
  • また、上記の例では、空の文字列と比較する代わりに、-n(空ではない)を使用できます。

    if [ -n "${APP_ID}" ]; then
    
  • psの例では、grepとawkは必要ありません。

    APP_ID=$(ps -C whoami --no-header --format 'pid')
    

固定スクリプトは次のとおりです。

APP_ID=$(ps -C whoami --no-header --format 'pid')

if [ -n "${APP_ID}" ]; then
    echo "Stopping instance $APP_ID"
fi

おすすめ記事