Bash 变量回显 0

Bash 变量回显 0

我正在尝试创建一个简单的 bash 脚本,但无法正确处理变量。当 RESULT 变量接收到空值时,它不会回显“-1”,而是返回 0。为什么 bash 将空值转换为 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

相关内容