O erro unary operator expected
provavelmente foi devido a $PIDofP
não estar entre aspas na condicional. Nesse caso, quando $PIDofP
é uma string vazia, o shell não vê nenhum valor no lado esquerdo de =
em vez de um valor em branco, daí a mensagem de erro.
O snippet a seguir implementa a lógica de comparação do PID corretamente por meio do uso de if
/ elif
/ else
, o que garante que apenas uma das três possíveis echo
de saídas seja gerada. Ele usa a sintaxe de comparação POSIX (consulte Qual é a diferença entre colchetes duplos e simples no bash? ).
#!/bin/sh
NAME=syslogd
PID=/var/run/$NAME.pid
PIDofP='pidof $NAME'
if [ "$PIDofP" = "" ]; then
echo " No process is running."
elif [ "$PIDofP" -lt 1000 ]; then
echo " The PID number is lower than 1000. ($PID: $PIDofP)"
else
# $PIDofP is >= 1000.
echo " The PID number is 1000 or higher. ($PID: $PIDofP)"
fi
exit 0