Se mailx detectar uma mensagem não lida, ela entrará no modo interativo e aguardará o envio de comandos interativos para leitura, salvamento, resposta, etc.
Você pode redirecionar /dev/null para mailx para que ele saia imediatamente:
if mailx </dev/null | grep -q 'unread'; then
echo 'there is unread mail'
else
echo 'there is no unread mail'
fi
O comportamento disso pode depender da implementação exata de mailx (difere um pouco entre Unices).