Прежде всего вы должны как можно скорее сохранить содержимое $?, потому что каждая команда запускает перезаписывать его содержимое. В вашем случае $? в операторе if является статусом выхода предыдущего echo, а не mvn.
Далее, для арифметического сравнения в bash (и sh ]), вы должны использовать -ne для не равных.
Поэтому я предлагаю:
mvn compile
status="$?"
echo "$status"
if [ $status -ne 0 ]; then
echo "is not 0"
else
echo "is 0"
fi
Но это можно сделать более элегантно с помощью
if ! mvn compile; then
echo "is not 0"
else
echo "is 0"
fi