Mais elegante? Não
Mais curto? Sim:)
#!/bin/bash
read string
if [ ${#string} -ge 5 ]; then echo "error" ; exit
else echo "done"
fi
E se você não tem problemas em negociar mais elegância em favor de ser mais curto, você pode ter um script com 2 linhas a menos:
#!/bin/bash
read string
[ ${#string} -ge 5 ] && echo "error" || echo "done"
Você pode usar colchetes duplos se achar que é mais seguro. Explicação aqui .