Entre os dois problemas, talvez seja necessário:
Para 1) edite o arquivo sudoers (use 'visudo') se alguma parte do seu script exigir acesso root. Muita informação na web sobre como fazer isso.
Para 2) isso soa como um problema de depuração de script. Você obtém o mesmo comportamento se você executar o script a partir do terminal em vez de esperar que o cron o inicie? O comportamento é diferente se você o executar como root (sudo)?
Você também pode considerar adicionar [[
e ]]
à sua instrução if. +1 para @Elder Geek para o caso.