diff --git a/ez_i.bash b/ez_i.bash index 681d774..342e221 100755 --- a/ez_i.bash +++ b/ez_i.bash @@ -2,7 +2,7 @@ : 'Trata-se de um módulo que oferece uma série de funcionalidades para criar um instalador usando "bash". -Version 1.0.0b +Version 1.1.0b Apache License Version 2.0, January 2004 @@ -623,6 +623,58 @@ f_get_stderr_stdout() { F_GET_STDOUT_R=$t_std } +YES_NO_R=0 +f_yes_no() { + : 'Questiona ao usuário "yes" ou "no" sobre determinado algo. + + Args: + QUESTION_P (str): Questionamento a ser feito. + WAIT_UNTIL_P (Optional[int]): Esperar até o intervalo informado + (em segundos). Padrão 0. + WAIT_UNTIL_RTN_P (Optional[str]): Valor a ser assumido após o intervalo + em WAIT_UNTIL_P. 1 - Yes; 0 - No. Padrão 1. + + Returns: + YES_NO_R (int): 1 - Yes; 0 - No. + ' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + RESP_V="" + YES_NO_R=0 + QUESTION_P=$1 + WAIT_UNTIL_P=$2 + WAIT_UNTIL_RTN_P=$3 + if [ -z "$WAIT_UNTIL_RTN_P" ] ; then + WAIT_UNTIL_RTN_P=1 + fi + if [ -z "$WAIT_UNTIL_P" ] ; then + read -e -r -p "$QUESTION_P (y/n) " RESP_V + else + if [ ${WAIT_UNTIL_RTN_P} -eq 1 ] ; then + AUT_ANSWER="y" + elif [ ${WAIT_UNTIL_RTN_P} -eq 0 ] ; then + AUT_ANSWER="n" + fi + + # NOTE: O "|| echo \"\"" serve par dar uma quebra de linha se nenhuma + # resposta foi informada! By Questor + eval "read -e -t$WAIT_UNTIL_P -r -p \"$QUESTION_P (y/n) (\"$AUT_ANSWER\" in $WAIT_UNTIL_P seconds) \" RESP_V" || echo "" + + fi + if [[ $RESP_V =~ ^([sS]|[yY])$ ]] || ( [ ${WAIT_UNTIL_RTN_P} -eq 1 ] && [ -z "$RESP_V" ] ) ; then + YES_NO_R=1 + elif [[ $RESP_V =~ ^([nN])$ ]] || ( [ ${WAIT_UNTIL_RTN_P} -eq 0 ] && [ -z "$RESP_V" ] ) ; then + if [ -n "$RESP_V" ] ; then + echo "NO!" + fi + YES_NO_R=0 + else + f_yes_no "$1" $2 $3 + fi +} + F_BAK_PATH_R="" F_BAK_MD_R=0 f_ez_mv_bak() { @@ -697,8 +749,31 @@ f_ez_mv_bak() { fi } +f_okay_exit() { + : '"Printa" uma mensagem de finalização e encerra o processo. + + Args: + EXIT_CAUSE_P (Optional[str]): Causa da finalização. + ' + + EZ_I_S_ON_HOLDER=$EZ_I_SKIP_ON_V + EZ_I_SKIP_ON_V=0 + EXIT_CAUSE_P=$1 + echo "" + f_open_section "I N F O R M A T I O N !" + EXIT_MSG_NOW_P="THE EXECUTION WAS TERMINATED!" + if [ ! -z "$EXIT_CAUSE_P" ] ; then + EXIT_MSG_NOW_P="$EXIT_MSG_NOW_P INFORMATION: \"$EXIT_CAUSE_P\"" + fi + echo "$EXIT_MSG_NOW_P" + echo + f_close_section + EZ_I_SKIP_ON_V=$EZ_I_S_ON_HOLDER + exit 0 +} + f_error_exit() { - : '"Printa" uma mensagem de erro e encerra o instalador. + : '"Printa" uma mensagem de erro e encerra o processo. Args: ERROR_CAUSE_P (Optional[str]): Causa do erro. @@ -707,9 +782,9 @@ f_error_exit() { EZ_I_S_ON_HOLDER=$EZ_I_SKIP_ON_V EZ_I_SKIP_ON_V=0 ERROR_CAUSE_P=$1 - echo + echo "" f_open_section "E R R O R !" - ERROR_MSG_NOW_P="AN ERROR OCCURRED AND THIS INSTALLER WAS CLOSED!" + ERROR_MSG_NOW_P="AN ERROR OCCURRED AND THE EXECUTION WAS TERMINATED!" if [ ! -z "$ERROR_CAUSE_P" ] ; then ERROR_MSG_NOW_P="$ERROR_MSG_NOW_P ERROR: \"$ERROR_CAUSE_P\"" fi @@ -1277,8 +1352,9 @@ f_get_percent_from() { percentagem. PERCENT_VAL_P (int): Valor de percentagem a ser obtido. REM_FLOAT_POINT_P (Optional[int]): 0 - Não remove ponto flutuante; 1 - - remove ponto flutuante (se o valor obtido for maior ou igual a 1). - Padrão 1. + Remove ponto flutuante (se o valor obtido for maior ou igual a 1). + 2 - Remove ponto flutuante (se o valor obtido for maior ou igual a + 1) e arredonda para o último dígito significativo. Padrão 1. Returns: F_GET_PERCENT_FROM_R (int): Porcentagem obtida. @@ -1296,14 +1372,24 @@ f_get_percent_from() { F_GET_PERCENT_FROM_R=$(awk '{printf("%.5f\n",($1*($2/100)))}' <<<" $VAL_GET_PERCENT_P $PERCENT_VAL_P ") F_GET_PERCENT_FROM_R=${F_GET_PERCENT_FROM_R} - if [ ${REM_FLOAT_POINT_P} -eq 1 ] ; then + if [ ${REM_FLOAT_POINT_P} -ge 1 ] ; then # NOTA: Técnica para comparar valores com ponto flutuante! By Questor if [ $(awk '{printf($1 >= $2) ? 1 : 0}' <<<" $VAL_GET_PERCENT_P 1 ") -eq 1 ] ; then + if [ ${REM_FLOAT_POINT_P} -eq 1 ] ; then - # NOTA: A estratégia abaixo foi utilizada para arredondar o valor - # (remover o ponto flutuante)! By Questor - F_GET_PERCENT_FROM_R=${F_GET_PERCENT_FROM_R%\.*} + # NOTA: A estratégia abaixo foi utilizada remover o ponto + # flutuante (truncar)! By Questor + F_GET_PERCENT_FROM_R=${F_GET_PERCENT_FROM_R%\.*} + + elif [ ${REM_FLOAT_POINT_P} -eq 2 ] ; then + + # NOTA: A estratégia abaixo foi utilizada para arredondar o + # valor (Ex.: 10.7 -> 11, 10.5 -> 10, 10.4 -> 10...)! + # By Questor + F_GET_PERCENT_FROM_R=$(awk '{printf("%.0f\n", $1);}' <<<" $F_GET_PERCENT_FROM_R ") + + fi fi fi } @@ -1622,36 +1708,3 @@ f_instruct() { } # < -------------------------------------------------------------------------- - -# > -------------------------------------------------------------------------- -# ESQUEMAS CONDICIONAIS! -# -------------------------------------- - -YES_NO_R=0 -f_yes_no() { - : 'Questiona ao usuário "yes" ou "no" sobre determinado algo. - - Args: - QUESTION_P (str): Questionamento a ser feito. - - Returns: - YES_NO_R (int): 1 - Yes; 0 - No. - ' - - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - QUESTION_P=$1 - YES_NO_R=0 - read -r -p "$QUESTION_P (y/n) " RESP_V - if [[ $RESP_V =~ ^([sS]|[yY])$ ]] ; then - YES_NO_R=1 - elif [[ $RESP_V =~ ^([nN])$ ]] ; then - echo "NO!" - YES_NO_R=0 - else - f_yes_no "$QUESTION_P" - fi -} - -# < -------------------------------------------------------------------------- -- libgit2 0.21.2