Mejores practicas para crear un Script de Shell en GNU/Linux – Parte 2

Primeramente, antes de leer esta publicación te recomiendo leer la parte I de dicha publicación, llamada «Mejores practicas para crear un Script de Shell en GNU/Linux«.

Shell Scripting

Seguidamente, un pequeño resumen de lo más importante de dicha entrada anterior:

A) El Shebang ideal debería escribirse de la siguiente manera:

#!/usr/bin/env bash.

Nota: Reemplazando la palabra bash por el shell de su preferencia.

B) Para lograr un excelente MODO BASH ESTRICTO ó SEGURO (Bash Strict Mode / BSM) ofrecimos las siguientes alternativas:

B.1) Configuración de la Sección de Depuración de errores:

  1. set -o errexit
  2. set -o nounset
  3. set -o pipefail
  4. # set -o xtrace

Sin embargo, en esta nueva entrada sugerimos en pro de minimizar las lineas de código el siguiente MODO BASH ESTRICTO ó SEGURO (Bash Strict Mode / BSM):

set -eou pipefail

Con este BSM logramos exactamente lo mismo que con las 3 líneas anteriores.

Mi recomendación personal es: Una vez construido su Script de Shell,  agregue la(s) líneas del BSM para empezar a depurar y perfeccionar su Script y dejarlo altamente funcional. Cuando lo desee agregue ha dicho BSM la opción (-x) para lograr el mismo efecto que cuando habilita la línea: set -o xtrace, en el método anterior, es decir, su línea de BSM debería quedar así:

set -eoux pipefail

B.2) Configuración de la Sección de la Salida de las Variables configuradas:

IFS=$'\n\t'

Agregando esta línea procedemos ha reconfigurar la variable Internal Field Separator (Separador de campo interno) y lograr una mejor visualización y / o captura de las palabras (campos) de una cadena de caracteres. Habilítelo o no, según sus requerimientos y necesidades.

Con estas configuración típicas:


    #!/bin/bash
    IFS=$' '
    items="a b c"
    for x in $items; do
        echo "$x"
    done

    IFS=$'\n'
    for y in $items; do
        echo "$y"
    done

Se obtendrían las salidas de las variables de la siguiente forma:


a
b
c
a b c

Con la configuración por defecto y recomendada:


    #!/bin/bash
    names=(
      "Aaron Maxwell"
      "Wayne Gretzky"
      "David Beckham"
      "Anderson da Silva"
    )

    echo "Con el valor por defecto de la variable IFS..."
    for name in ${names[@]}; do
      echo "$name"
    done

    echo ""
    echo "Con el Modo BSM para el valor de la variable IFS activado..."
    IFS=$'\n\t'
    for name in ${names[@]}; do
      echo "$name"
    done

Se obtendrían las salidas de las variables de la siguiente forma:


Con el valor por defecto de la variable IFS...
Aaron
Maxwell
Wayne
Gretzky
David
Beckham
Anderson
da
Silva

Con el Modo BSM para el valor de la variable IFS activado...
Aaron Maxwell
Wayne Gretzky
David Beckham
Anderson da Silva

B.3) Configuración de la Sección de la configuración predeterminada del terminal de ejecución:

setterm --reset

Agregando esta línea procedemos ha resetear por completo toda la sesión y los parámetros de ejecución del terminal donde se invoca el uso del Script de Shell ejecutado. Habilítelo o no, según sus requerimientos y necesidades.

Con esto tendremos un BSM muy utíl y eficiente para tener un excelente Script de Shell.

Por ultimo, exploraremos lo que ha continuación debería tener dicho Script de Shell:

  • Una Sección de informativa sobre el Creador y el Programa:

###########################################################
# SECCIÓN INFORMATIVA SOBRE EL CREADOR Y EL PROGRAMA
###########################################################

###########################################################
#                             MI PAÍS 
#
# NOMBRE: 
# VERSIÓN: 
# TIPO DE PROGRAMA:
# FUNCIÓN:
# NOMBRE CÓDIGO:
# PAÍS ORIGEN:
# CREADO POR:
# EMAIL:
# NOMBRE FACEBOOK:
# PAGINA PERSONAL FACEBOOK:
# COMUNIDAD FACEBOOK:
# TWITTER:
# TELÉFONO:
# PROMOCIONADO POR:
# PAGINA WEB DEL PROYECTO TIC - TAC:
# FECHA DE LANZAMIENTO DE LA PRIMERA VERSIÓN (1.0):
# FECHA DE LANZAMIENTO DE LA VERSIÓN ACTUAL (8.0+0):
# FECHA DE ULTIMA ACTUALIZACIÓN:
###########################################################

  • Una sección informativa sobre el Licenciamiento del Programa:

###########################################################
# SECCIÓN INFORMATIVA SOBRE EL LICENCIAMIENTO DEL PROGRAMA
###########################################################

###########################################################
# NOMBRE DEL SCRIPT DE SHELL
###########################################################
#
# Derechos de autor:
# Copyleft (C) Año - Creador
# 
# Licenciamiento:
#
# El NOMBRE DEL SCRIPT DE SHELL no viene con ninguna garantía. El 
# Autor no se hace responsable si se al aplicarse el S.O., se
# corrompe, daña o inutiliza.
#
# El NOMBRE DEL SCRIPT DE SHELL es una aplicación de Software 
# Libre, por lo tanto usted puede redistribuirlo y / o modificarlo 
# bajo los términos de la Licencia Pública General de GNU
# publicada por la free Software Foundation, o sea, la versión 3
# ó versión posterior, según sea su preferencia.
#
# Este programa se distribuye con la esperanza de que sea útil,
# pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
# COMERCIALIZACIÓN o IDONEIDAD para un propósito particular.
# Vea la Licencia Publica General para más detalles.
#
# Procure obtener una copia de la Licencia Pública General de GNU
# para estar al tanto sobre lo estipulado por la misma.
#
# Consúltela en:
#
# http://www.gnu.org/licenses/licenses.es.html
# http://www.gnu.org/licenses/license-list.html
# http://www.gnu.org/licenses/gpl-howto.es.html
# http://www.gnu.org/help/evaluation.html
# http://www.gnu.org/licenses/gpl-3.0.html#howto
#
# Más Información:
#
# http://www.creativecommonsvenezuela.org.ve/cc-licencias
# http://creativecommons.org/choose/?lang=es_ES
#
# Por lo tanto, Si usted hace alguna modificación en esta
# aplicación o toma una porción de él, deberá siempre mencionar al
# autor original de la misma:
#
# Desarrollador : 
# Nick          : 
# Twitter       : 
# Facebook      : 
# Telegram      : 
# Canal Telegram:
#
# Este SCRIPT tiene como propósito:
#
# 1.- PROPÓSITO 1: ABCDEFGHIJKLMNÑOPQRSTUVXYZ
#
# 2.- PROPÓSITO 2: ABCDEFGHIJKLMNÑOPQRSTUVXYZ
#
############################################################
# NOMBRE DEL SCRIPT DE SHELL
############################################################

Espero que con esta segunda parte de las “Mejores practicas para crear un Script de Shell en GNU/Linux” les sea suficiente para que logren enfocarse a fondo en cada pequeño aspecto de los mismo y el porque de muchas cosas a la hora de crear un Script de Shell, es decir, espero que algunos de estos consejos les ayuden a la hora de realizar mejores Script de Shell, pero no tanto para ustedes mismo, sino para aquellos Usuarios o SysAdmin que tenga que gestionarlos. Para que así no tenga que pasar por una tediosa y difícil tarea de averiguar que codificaron, como y porqué, y por qué ya no funciona.

Hasta las próximas publicaciones sobre Shell Scripting!


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.