A versão GNU de date que você está acostumado no Linux suporta muito mais formato de data do que a versão de date na maioria das outras variantes Unix. Ele também tem muitas opções que não estão presentes em outras variantes do Unix. O único uso padrão de date é exibir a data atual de acordo com um formato especificado com um argumento +… (e também uma maneira de o administrador do sistema definir a data do sistema) e a opção -u para especificar o UTC em vez do fuso horário local.
Em FreeBSD , você pode usar o utilitário date para converter entre formatos de data com a opção -f , por exemplo date -f %s "$datum" +%Y-%m-%d para converter uma data expressa em segundos da época para um formato legível por humanos.
Se você quiser uma extravagante análise de data, você pode instalar o pacote coreutils , que contém a data GNU. Ou você pode usar o módulo Date::Parse em Perl ou dateutil em Python.
Para fazer com que um script de shell pare na maioria dos erros, adicione set -e logo abaixo da linha #! .
Se você quiser exibir um erro explicitamente, cabe a você sair do script com um status de erro. Imprimir erros para stderr, não para stdout.
date -d "$datum" +"%Y-%m-%d" >/dev/null 2>&1 || {
echo "ERROR wrong format" >&2
exit 1
}
ou
if ! date -d "$datum" +"%Y-%m-%d" >/dev/null 2>&1; then
echo "ERROR wrong format" >&2
exit 1
fi