NewtonJr.
(usa CentOS)
Enviado em 29/12/2015 - 16:08h
Caro Paulo, o erro que deu foi:
./exec_scritps_cron_intervalo_datas_v2.sh -dt1 01/12/2015 -dt2 27/12/2015
data_ini - 01/12/2015 || data_fim - 27/12/2015
date: data inválida "27/12/2015"
data_ini - 01/12/2015 || data_fim - 27/12/2015
Eu percebi que o comando não funciona qnd a data em $data_ini e $data_fim estiver no formato dd/mm/YYYY.
Baseado nos seus códigos postados e no do seu blog fiz algumas modificações. Eis o código:
function funcao_is_data_valida() {
data="$1"
if ! [[ "$data" =~ ^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/([0-9]{4})$ ]]; then
return
fi
year=${BASH_REMATCH[3]}
month=${BASH_REMATCH[2]}
day=${BASH_REMATCH[1]}
data_aux="$year/$month/$day"
if ! date -d "$year/$month/$day" >/dev/null 2>&1; then
return
fi
echo "$data_aux"
}
#[ "$data_ini" ] || data_ini=$( date +01/%m/%Y )
#[ "$data_fim" ] || data_fim=$( date -d "$( date +%Y-%m-01 ) + 1 month - 1 day" +%d/%m/%Y )
if [ -z "$data_ini" ] || [ -z "$data_fim" ] ; then
data_ini=$( date +01/%m/%Y )
data_fim=$( date -d "$( date +%Y-%m-01 ) + 1 month - 1 day" +%d/%m/%Y )
fi
data_ini_aux=$( funcao_is_data_valida $data_ini );
data_fim_aux=$( funcao_is_data_valida $data_fim );
if [ -z "$data_ini_aux" ] || [ -z "$data_fim_aux" ] ; then
echo -e "Data(s) invalida(s)."
exit 1
fi
n_segundos_data_ini=$( date -d "$data_ini_aux" +%s )
n_segundos_data_fim=$( date -d "$data_fim_aux" +%s )
[ $n_segundos_data_ini -gt $n_segundos_data_fim ] && echo "Erro! Data final é menor do que a Data Inicial." && exit 1
O que acha? Está funcionando nos meus testes.
O tratamento para os parâmetros do script 03 ficou assim:
if [ -z "$mes" ] || [ -z "$ano" ] ; then
mes=$(date +%m)
ano=$(date +%Y)
fi
[ "$mes" -lt 1 -o "$mes" -gt 12 ] && echo "Mês ($mes) com valor fora do intervalo [1, 12]." && exit 1
[ "$ano" -lt 2000 -o "$ano" -gt $(date +%Y) ] && echo "Ano ($ano) com valor fora do intervalo [2000, $(date +%Y)]." && exit 1
data_ini=$( date +01/$mes/%Y )
data_fim=$( date -d "$( date +%Y-$mes-01 ) + 1 month - 1 day" +%d/$mes/%Y )
Parece que funciona bem. Muito obrigado pelos códigos.
Paulo, mais uma pergunta: como eu faço para criar uma biblioteca de funções Shell Script e chamar funções dessa biblioteca a partir de qualquer outro script? Por exemplo, poder chamar a função funcao_is_data_valida() em varios outros scripts sem ter que definir a função novamente.