Acho que a resposta do @ DavidPostill é a correta, mas se quiser manter a distinção entre avisos e erros, bem como detectar notas, você pode adicionar 2>err
ao final do comando gcc
:
gcc -O3 -o hello hello.c
Depois faça seu teste:
if [ $? -eq 0 -a ! -s err ]