Está en la página 1de 11

INSTITUTO SUPERIOR TECNOLÓGICO “JUAN DE VELASCO”

CARRERA DE DISEÑO Y MANTENIMIENTO DE REDES

INFORME

NOMBRE: Realizar una correcta programación de scripts

 DATOS GENERALES:

NOMBRES Y APELLIDOS: DANNY JAVIER TUNKI TAIPE

FECHA DE REALIZACIÓN: 22/02/2020 FECHA DE NTREGA: 28/02/2020

1
INSTITUTO SUPERIOR TECNOLÓGICO “JUAN DE VELASCO”
Av. Chimborazo 11-56 y Cuba
Telf: 2942 077

1. INTRODCCIÓN DE LOS SCRIPTS

En varios posts anteriores hemos explicado el uso de un sinfín de comandos (y


también cómo buscar uno en particular de acuerdo a un resultado que estemos
buscando), pero los hemos utilizado de manera aislada o a lo sumo conectados por
tuberías. Una de las maneras de descubrir la potencia de la línea de comandos en
Linux es mediante la creación de shell scripts, los cuales son archivos ejecutables
de texto plano que contienen comando tras comando en líneas sucesivas. Dichos
comandos son interpretados por una shell, un programa que los toma como entrada
y actúa como interfaz para que el kernel los ejecute.

La costumbre al presentar un nuevo lenguaje de programación es mostrar el clásico


mensaje Hola mundo por pantalla. Tomemos un curso diferente para hacer algo un
poco más interesante, útil, y que nos permita presentar conceptos básicos.

Haciendo uso de un editor de texto (como por ejemplo vim), escribamos lo siguiente
dentro de primerscript.sh:

#!/bin/bash

# La fecha actual
FECHA=$(date +%d/%m/%Y)

# Cantidad de sesiones abiertas


SESIONES=$(who | wc -l)

# Mensaje
echo "Hoy es $FECHA. Hay $SESIONES sesiones abiertas"
Hagamos algunas aclaraciones:

 La primera línea del script siempre debe indicar cuál es la shell con la que deseamos
ejecutar el mismo. En la mayoría de las ocasiones elegiremos a Bash. La ruta
absoluta a la shell debe ir precedida por los caracteres #!.
 Salvo la primera línea del script, todas aquellas que comiencen con un signo
numeral son comentarios informativos. Los usaremos para explicar el propósito de
los comandos que siguen, con el propósito de aclarar el funcionamiento de nuestro
script a otra persona que lo examine en el futuro (¡y para recordárnoslo a nosotros
mismos también!). Estas líneas no son interpretadas por la shell durante la ejecución
del script.
 Para evitar tener que repetir un mismo comando en varias partes del script, y para
facilitar su lectura también, a menudo querremos guardar el resultado en una
variable. De esa manera, si deseamos cambiar el comando en el futuro, solamente
tendremos que hacerlo en el lugar en donde declaramos la variable. En el ejemplo
de arriba guardamos la salida de los comandos que indican la fecha actual y la
cantidad de sesiones de usuario abiertas en las variables FECHA y SESIONES,

2
ING. PAUL CAMPOS
INSTITUTO SUPERIOR TECNOLÓGICO “JUAN DE VELASCO”
Av. Chimborazo 11-56 y Cuba
Telf: 2942 077

respectivamente. Luego de indicar el nombre deseado para la variable, colocamos


los signos =$ y encerramos el comando entre paréntesis.
 Finalmente, el comando echo nos servirá para mostrar un mensaje por pantalla en
el que mezclamos texto de nuestra elección con el contenido de las variables
FECHA y SESIONES. Cuando deseamos utilizar en otra parte del script el valor
guardado en una variable, lo hacemos anteponiendo el signo $ al nombre de la
variable. A esta altura podemos darnos cuenta de que es mucho más amigable
leer "Hoy es $FECHA" que "Hoy es $(date +%d/%m/%Y)".

Cerremos el archivo guardando los cambios y demos permisos de ejecución al


archivo recién creado:

chmod +x primerscript.sh
Y ejecutémoslo anteponiendo un punto y una barra al nombre del script (esto es
necesario para indicar que primerscript.sh es un archivo ejecutable presente en el
directorio actual, donde por lo general el sistema no espera encontrar archivos de ese
tipo):

./primerscript.sh
El resultado puede verse en la Fig 1:

2. ESTRUCTURAS DE CONTROL

En nuestra cuarta entrega sobre la introduccion a el intérprete de comandos Bash,


vamos a ver una pequeña introduccion a las estructuras de control y bucles en Bash.
Estas construcciones nos ayudan a controlar la ejecucion de un script y a obtener
diversos resultados dependiendo de las condiciones que se cumplan o no cuando
ejecutamos el script.
En Bash existen estas construcciones para controlar el flujo de ejecucion de un
script:

 if/else: Ejecuta una serie de comandos dependiendo si una cierta condicion se cumple
o no.
 for: Ejecuta una serie de comandos un numero determinado de veces.
 while: Ejecuta una seria de comandos mientras que una determinada condicion sea
cumpla.
 until: Ejecuta una serie de comandos hasta que una determinada condicion se
cumpla.
 case: Ejecuta una o varias listas de comandos dependiendo del valor de una variable.
 select: Permite seleccionar al usuario una opcion de una lista de opciones en un
menu.

3
ING. PAUL CAMPOS
INSTITUTO SUPERIOR TECNOLÓGICO “JUAN DE VELASCO”
Av. Chimborazo 11-56 y Cuba
Telf: 2942 077

La mayoria de condiciones utilizadas con estas construcciones son comparaciones


de cadenas alfanumericas o numericas, valores de terminacion de comandos y
comprobaciones de atributos de ficheros. Antes de seguir viendo como estas
construcciones se pueden utilizar, vamos a ver como las condiciones se pueden
definir.

Comparaciones De Cadenas Alfanumericas

Operador Verdad (TRUE) si:

------------------------------------------

cadena1 = cadena2 cadena1 es igual a cadena2

cadena1 != cadena2 cadena1 no es igual a cadena2

cadena1 < cadena2 cadena1 es menor que cadena2

cadena1 > cadena 2 cadena1 es mayor que cadena 2

-n cadena1 cadena1 no es igual al valor nulo (longitud mayorque 0)

-z cadena1 cadena1 tiene un valor nulo (longitud 0)

Comparacion De Valores Numericos

Operador Verdad (TRUE) si:

------------------------------------------

x -lt y x menor que y

x -le y x menor o igual que y

x -eq y x igual que y

x -ge y x mayor o igual que y

x -gt y x mayor que y

x -ne y x no igual que y

Comprobación De Atributos De Fichero

4
ING. PAUL CAMPOS
INSTITUTO SUPERIOR TECNOLÓGICO “JUAN DE VELASCO”
Av. Chimborazo 11-56 y Cuba
Telf: 2942 077

Operador Verdad (TRUE) si:

------------------------------------------

-d fichero fichero existe y es un directorio

-e fichero fichero existe

-f fichero fichero existe y es un fichero regular (no un

directorio, u otro tipo de fichero especial)

-r fichero Tienes permiso de lectura en fichero

-s fichero fichero existe y no esta vacio

-w fichero Tienes permiso de escritura en fichero

-x fichero Tienes permiso de ejecucion en fichero (o de busqueda

si es un directorio)

-O fichero Eres el dueño del fichero

-G fichero El grupo del fichero es igual al tuyo.

fichero1 -nt fichero2 fichero1 es mas reciente que fichero2

fichero1 -ot fichero2 fichero1 es mas antiguo que fichero2

Podemos combinar varias condiciones con los símbolos '&&' (AND) y '||' (OR), y
negar una condición con '!'. Unos ejemplos mas adelante aclararan como
utilizarlos.

If/Else
La sintaxis de esta construcción es la siguiente:

if "condicion"

5
ING. PAUL CAMPOS
INSTITUTO SUPERIOR TECNOLÓGICO “JUAN DE VELASCO”
Av. Chimborazo 11-56 y Cuba
Telf: 2942 077

then

"comandos"

[elif "condicion"

then

"comandos"]

[else

"comandos"]

fi

Como ya hemos dicho, podemos comprobar los valores de terminación de un comando, y


comparar cadenas alfanuméricas/numéricas y atributos de ficheros. Nada mejor que unos
ejemplos para aclararnos las ideas.

#!/bin/bash

# Comprobando terminacion de un comando

DIRECTORIO="/tmp/test"

COMANDO="/bin/mkdir $DIRECTORIO"

if $COMANDO

then

echo "$DIRECTORIO ha sido creado"

else

echo "$DIRECTORIO no pudo ser creado"

fi

6
ING. PAUL CAMPOS
INSTITUTO SUPERIOR TECNOLÓGICO “JUAN DE VELASCO”
Av. Chimborazo 11-56 y Cuba
Telf: 2942 077

3. CONTROL DE ENTRADA Y SALIDA DE DATOS.

La pantalla
Como ya ha visto, todos los programas curses deben empezar con initscr y acabar
con endwin. Estas son las definiciones de sus archivos de cabecera:

La función initscr sólo se la puede llamar una vez cada programa. La


función initscr envía un indicador de la estructura sdtscr si tiene éxito. Si falla,
simplemente muestra un mensaje de diagnóstico y error y hace que el programa
salga.
La función endwin envía OK si tiene éxito y ERR si falla. Puede llamar a endwin para
salir de curses y después puede reanudar la operación curses llamando
a clearok (stdscr, 1) y refresh. De esta manera conseguirá que curses se olvide
eficazmente de la apariencia de la pantalla física, forzándole a que ejecute una
visualización totalmente distinta.
Salidas de pantallas
Existen varias funciones básicas para actualizar la pantalla:

Leer la pantalla
Puede leer los caracteres de la pantalla, a pesar de que esta opción no se suele
usar porque es más fácil seguir la pista de lo que se ha escrito. Si fuese necesario,
puede hacerlo con las siguientes funciones:

7
ING. PAUL CAMPOS
INSTITUTO SUPERIOR TECNOLÓGICO “JUAN DE VELASCO”
Av. Chimborazo 11-56 y Cuba
Telf: 2942 077

La función inch debería estar disponible siempre, pero las funciones instr y innstr no
siempre se aceptan. La función inch envía un carácter y la información sobre su
atributo a partir de la ubicación actual del cursor en la pantalla. Tenga en cuenta
que inch no envía un carácter, sino un chtype, mientras que instr e innstr escriben
matrices de chars.

Modos de teclado y entradas

Veamos a continuación un programa de ejemplo, ipmode.c, que muestra como


manejar el teclado.

1. Configure el programa y las primeras llamadas curses:

2. Cuando el usuario introduce su contraseña, ha de detener la contraseña que se


transmite mediante eco a la pantalla. Compruebe después la contraseña con zyzzy:

8
ING. PAUL CAMPOS
INSTITUTO SUPERIOR TECNOLÓGICO “JUAN DE VELASCO”
Av. Chimborazo 11-56 y Cuba
Telf: 2942 077

3. Finalmente, vuelva a permitir el eco del teclado y muestre el éxito o fallo:

9
ING. PAUL CAMPOS
INSTITUTO SUPERIOR TECNOLÓGICO “JUAN DE VELASCO”
Av. Chimborazo 11-56 y Cuba
Telf: 2942 077

Cómo funciona

10
ING. PAUL CAMPOS
INSTITUTO SUPERIOR TECNOLÓGICO “JUAN DE VELASCO”
Av. Chimborazo 11-56 y Cuba
Telf: 2942 077

4. WEBGRAFÍA:

 http://www.ub.edu/stat/docencia/bioinformatica/introbiocomputacio/Linux/Scripts_de_S
hell_en_Linux.pdf
 https://computernewage.com/2018/09/16/scripting-linux-introduccion/
 https://e-mc2.net/es/bash-iv-estructuras-de-control-y-bucles
 https://baulderasec.wordpress.com/programacion/programacion-con-linux/6-gestion-de-
pantallas-de-texto-con-curses/el-control-basico-de-entradas-y-salidas/

11
ING. PAUL CAMPOS

También podría gustarte