간단한 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