我正在尝试创建一个简单的 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