Sistemas de script,s


Índice:

   Convecciones

   Directorios principales

   Otros directorios

   Opciones de ejecución del intérprete Bash

   Include INC_CFG.sh

   HOW TO DO

      Control de salida / error de comandos


Convecciones  ⮴  


Directorios principales  ⮴  

El sistema de archivos de los script,s tiene tres directorios principales, que

se definen en el propio archivo del script.


  1. K_CFG_SCRIPTS_PATH_SYSTEM: directorio donde se almacena información común

    a todos los script,s, tal como:


    • /include: directorio donde se almacenan los includes que pueden ser

      llamados mediante source.

    • /files/files_exclude: directorio que almacena lo archivos exclude que

      serán usado en los script,s (rsync)

    • /files/files_pass: directorio que alamacena los archivos con las con-

      traseñas que pueden usar los scritp,s para acceder a servicios.


  2. K_CFG_SCRIPTS_PATH_CONFIG: El directorio donde se alamacena la información

    específica del scritp. En directorio se guarda el archivo ini del script,

    el directorio temporal, los archivos de log, ...


  3. K_CFG_SCRIPTS_PATH_SOURCE: directorio donde se encuentran los archiovs a

    incluir con source. Si no se define manualmente, por defecto será:


            K_CFG_SCRIPTS_PATH_SOURCE="$K_CFG_SCRIPTS_PATH_SYSTEM/include


En el inicio del script se define el directorio que debe ser asignado a cada uno

de ellos. Esto puede hacerse de dos formas:


  1. Leyendo la información desde variables de entorno definidas en ~/.envms

  2. Asigando su valor en el scritp.


Por defecto, se espera que en ~/.envms se encuentren definidas las variables de 

entorno necesarias para inicializar el valor de los dos primeros:


~/envms:



    # Path donde los scripts almacenan su configuración/información

    export SCRIPTS_PATH_CONFIG=$HOME/.config/myscripts


    # Path donde se encuentra el sistema de archivos de los scripts

    export K_CFG_SCRIPTS_PATH_SYSTEM=$HOME/script_juanp



El script asignará estos valores a las constantes indicadas anteriormente, com-

probando que los directorios existan y sean accesibles. Esto lo realiza en:


  # Carga las variables de entrono si no lo hubieran sido ya.

    if [[ -z "${LOADED_ENV+x}" ]]; then

      # shellcheck disable=SC1091

      source "$HOME/.envms"

    fi



También se puede asignar un valor manualmente, para ello comentar las líneas an-

teriores y asignar el valor deseado a la(s) constantes. Una vez tengan un valor,

el proceso de asignación del valor no se realizará.


  if [[ -z "${K_CFG_SCRIPTS_PATH_CONFIG+x}" ]]; then


Otros directorios  ⮴  

Definidos en el archivo include inc_cfg.sh se encuentran:


  1. K_CFG_DIR_SCRITP: directorio donde se almacenará la información específica

    del script.


    Siendo el nombre del script task_backup.sh:


            K_CFG_DIR_SCRITP="$K_CFG_SCRIPTS_PATH_SYSTEM/task_backup"


  2. K_CFG_TMP_DIR_SCRIPT: directorio donde el script almacenará todos los ar-

    chivos temporales.


    Se define en base a K_CFG_DIR_SCRITP:


            K_CFG_TMP_SCRITP="$K_CFG_DIR_SCRITP/tmp"


Opciones de ejecución del intérprete Bash  ⮴  

Los script y librerias se ejecutan con las siguientes opciones de ejecución:


  set -eEuo pipefail


Descripción de cada una de ellas:



Include INC_CFG.sh  ⮴  

Tiene por objeto definir las variables globales necesarias para el funciona-

miento del script. Será el primero en incluirse (source) en el script.


Además de los directorios indicados anteriormente, en este archivo se defi-

ne:


  1. __CFG_NAME_ONLY_SCRITP:

  2. K_CFG_DATE_INI_SCRIPT:

  3. K_CFG_NAME_INI_SCRIPT:

  4. K_CFG_NAME_FILE_LOG:

  5. Colores:

    • CFG_COLOR_RED

    • CFG_COLOR_YELLOW

    • CFG_COLOR_GREEN

    • CFG_COLOR_END

  6. :

  7. :

  8. :

  9. :

  10. :


HOW TO DO  ⮴  

Control de salida / error de comandos  ⮴  

En la ejecución de comandos con las opciones de ejecución, cualquier error pro-

voca la finalización del scritp. No obstante, ha determinadas ocasiones en las

que no se desea ese comportamiento.


Ejemplo 1: Emplear una función que devuelve  True / False (error). En este ca-

caso no deseamos que se rompa el script al ejecutar la función y

esta devuelva error, sino controlarlo y, por ejemplo, mostrar un

mensaje.


    _check_is_valid(){

      if [[ $1 -eq 0]]; then

        return 1

      else

        return 0

      fi



    if ! _check_is_valid 1; then

      echo "Error: No es válido ..."

    fi


Ejemplo 2: Un comando más complejo que no queremos que en caso de error finali-

ce sin más el script.


    # --- Se ejecuta con "tolerancia a error"


      set +e            # Desactivar temporalmente e

      set +o pipefail


      rsync "${opts[@]}" \

            "$ORIGEN" "$DESTINO" \

             2> "$FILE_LOG_ERROR" | _log_add


      rc=${PIPESTATUS[0]}


      set -e            # Activar

      set -o pipefail



    # --- Contorl de errores

    if [[ $rc -gt 0 ]]; then

      _log_add "ERROR: El comando rsync ha finalizado con el código de error $rc"


      while IFS= read -r linea; do

        [[ -n "$linea" ]] && _log_add "ERROR: $linea"

      done < "$FILE_LOG_ERROR"


      return 1

    fi