jueves, 11 de octubre de 2018

Diseñando un buen script


Tanto si vas a programar un script para otra persona como para ti mismo, es interesante que su diseño sea limpio, claro y conciso. Si sigues esta serie de pautas lo tendrás.

Ejecución desatendida
En este caso concreto, destacar que el script tiene que ser claro para su posible comprensión o cambios en el futuro. De resto, el script se ejecutará sin ser visto (ninja mode), con lo cual poco importa que sea bonito.

Ejecución manual
Aquí ya la cosa cambia, sobre todo si tenemos un script estilo asistente (mis preferidos). Hablemos de este con un ejemplo:

WindowsLinux
REM Autor: Kevin I.
REM Date: xx/xx/xx
REM Descripcion: Script para bla bla..
echo off
cls 
REM --- VARIABLES ---
set userx=kevin 
REM --- EXECUTIONS ---
echo Hello %userx%
net user %userx% /add
#!bin/bash
# Autor: Kevin I.
# Date: xx/xx/xx
# Descripcion: Script para bla bla..
clear 
#  --- VARIABLES ---
userx=kevin 
# --- EXECUTIONS ---
echo Hello $userx
useradd -m -s /bin/bash $userx
Como podéis observar, destacan 3 partes principales: Descripcion, variables y ejecuciones
Yo particularmente empiezo poniendo el autor (en caso de Linux, también el interprete):

WindowsLinux
rem Autor: Kevin I.#!bin/bash
# Autor: Kevin I.
Luego limpiar la ventana. En windows, para una mejor comprensión, desactivar los echo de los comandos (echo off):

WindowsLinux
echo off
cls
clear
A partir de ahí las variables y las ejecuciones. Con respecto a las variables, mi consejo es que sean descriptivas y con pocos caracteres (nada de %direccion_ip_metida_en_esta_variable%). Llevando la buena practica un poco mas lejos, construir el script completo en ingles.

Creo que es importante separar las variables que van a ser fijas y la que serán modificadas manualmente antes de su ejecución. Aunque podemos evitar eso pasando parámetros al script con las variables que serán modificadas según el caso y de esta forma no tener que editar el archivo cada vez que se quiera cambiar alguna variable:

WindowsLinux
script.bat kevin
script.sh kevin
REM Autor: Kevin I.
echo off
cls 
REM --- VARIABLES ---
set userx=%1 
REM --- EXECUTIONS ---
echo Hello %userx%
net user %userx% /add
#!bin/bash
# Autor: Kevin I.
clear 
#  --- VARIABLES ---
userx=$1
# --- EXECUTIONS ---
echo Hello $userx
useradd -m -s /bin/bash $userx
Hay una opción alternativa a las anteriores y es preguntar por el contenido que tendrán esas variables que cambian. Al ejecutar el script siguiente script, se detendrá para preguntarte "Nombre?:", lo escribes y continua la ejecución del resto del código:

WindowsLinux
REM Autor: Kevin I.
echo off
cls 
REM --- VARIABLES ---
set /p userx=Nombre?: 
REM --- EXECUTIONS ---
echo Hello %userx%
net user %userx% /add
#!bin/bash
# Autor: Kevin I.
clear 
#  --- VARIABLES ---
read -p "Nombre?: " userx
# --- EXECUTIONS ---
echo Hello $userx
useradd -m -s /bin/bash $userx
Otra cosa a tener en cuenta, al igual que cualquier lenguaje de programación, es el tabulado. Importante para facilitar la lectura del código.

Para acabar, dejo de ejemplo un sencillo script en batch que suelo usar con todo lo anterior y algunos extras como un menú. A ver si averiguáis su función:
REM Autor: Kevin I.
REM Date: xx/xx/xx
REM Descripción: DELETED FOR SPOILER
ECHO OFF
CLS
:ZERO
ECHO --------------------------------------
ECHO Menú
ECHO --------------------------------------
ECHO.
ECHO 1.- Direccion IP Red 1 (192.168.0.190)
ECHO 2.- Direccion IP Red 2 (172.20.11.190)
ECHO 3.- Otra IP
ECHO.
SET /p option=Elige una opcion:
IF %option%==1 (
GOTO UNO
)
IF %option%==2 (
GOTO DOS
)
IF %option%==3 (
GOTO TRES
) ELSE (
ECHO Error: Elija una de las opciones
PAUSE
GOTO ZERO
)
:UNO
netsh interface ip set address "Ethernet" static 192.168.0.190 255.255.255.0 192.168.0.254
netsh interface ip set dns "Ethernet" static 8.8.8.8 8.8.4.4
ECHO Direccion IP Red 1 aplicada
ECHO.
PAUSE
EXIT
:DOS
netsh interface ip set address "Ethernet" static 172.20.11.190 255.255.255.0 172.20.11.254
netsh interface ip set dns "Ethernet" static 8.8.8.8 8.8.4.4
ECHO Direccion IP Red 2 aplicada
ECHO.
PAUSE
EXIT
:TRES
CLS
SET /p direc=Direccion IP:
SET /p masc=Mascara:
SET /p gate=Gateway:
SET /p dns1=DNS principal:
SET /p dns2=DNS secundario:
ECHO.
netsh interface ip set address "Ethernet" static %direc% %masc% %gate%
netsh interface ip set dns "Ethernet" static %dns1% %dns2%
ECHO Direccion IP %direc% aplicada
ECHO.
PAUSE
EXIT

0 comentarios:

Publicar un comentario