バッシュ変数エコー0

バッシュ変数エコー0

単純なbashスクリプトを作成しようとしていますが、変数を正しく処理できません。 RESULT 変数が null 値を受け取ると、「-1」をエコーせずに 0 を返します。 bashがnull値を0に変換するのはなぜですか?

SERVICE="$1"
RESULT=`ps auxw | grep ${SERVICE} | grep -v grep | awk '{s+=$3} END {print s}'`
if [ -z "$RESULT" ]; then
   echo "-1"
else
   echo $RESULT
fi

ベストアンサー1

常に${RESULT}があるからです。検索時にコマンドラインに$ {SERVICE}を入力すると、常に検索されていることがわかります。これを防ぐ方法を確認してください。

cat search.sh

SERVICE="$1"
RESULT=$(ps auxw | grep ${SERVICE} | grep -v 'grep\|search.sh' | awk '{s+=$3} END {print s}')
if [ -z "$RESULT" ]; then
   echo "-1"
else
   echo $RESULT
fi

にスクリプト名を追加しましたgrep -v。それ以外の場合は、常にというプロセスがあります。search.sh ${SERVICE}

しかし、これはベストプラクティスからは遠いです。私が理解したのは、プロセスの現在のCPU使用量を名前で確認する必要がありますか?以下を考慮してください。

SERVICE="$1"
RESULT=`pgrep ${SERVICE}`
if [ -z "$RESULT" ]; then
   echo "-1"
else
   for proc in ${RESULT}; do ps -p ${proc} -o %cpu | tail -n +2; done
fi

おすすめ記事