Rode seu shell em batch e veja se ele vai executar sem problemas.
De qualquer forma, tentando adiantar um provável problema para a rotina não rodar usando-se o cron, mas rodar normalmente... vou dar um chute aqui e passar um dos possíveis problemas. O tratamento de variáveis quando se executa um shell script é diferente de se rodar o shell direto no prompt (ao menos era assim no UNIX, e tenho feito da mesma forma e não tem dado problema). Talvez seja isto, então com o teste você tira a dúvida.
De qualquer forma, até onde sei (na versão do UNIX que eu usava até 1999), as variáveis que devem ser compostas durante a execução devem ser precedidas de uma "\".
Tipo assim, se você precisa de uma variável com a data, e ela não vai mudar, ou depender de outra coisa basta colocar $DATA (por exemplo).
Já se você esta compondo uma variável com os dados de outra... vou exemplificar:
SALARIO=`expr $BRUTO - $DESC`
Você deve compor a variável assim:
SALARIO=\`expr \$BRUTO - \$DESC\`
Isto porque senão, assim que o shell começa a ser executado (em batch) ele pega todas as variáveis sem a "\" e já a substitui pelos seus valores naquele momento.
Portanto uma composição de DATA (exemplo de novo) não teria problema pq a informação já viria do sistema, mas uma formula como a de cima teria as variáveis $BRUTO e $LIQ ainda não preenchidas, o que poderia causar um erro....
Olha, desculpe se não consegui explicar direito e se me enrolei, me complico com as palavras um pouco, e também me desculpe se no Linux não for assim, pois como te disse aprendi a mexer com shell em 1989, e era no UNIX.
Espero que seu problema seja resolvido, caso contrário tentamos de novo... quem sabe não é algo simples e o cron simplesmente não "startou" a rotina.