Los scripts en Bash son componentes potentes para gestionar soluciones a tareas.
¿Qué quiere decir esto? Los scripts pueden ser soluciones eficientes para tareas repetitivas en un tiempo breve.
¿Cómo escribimos un script para ser usado en Bash?
Lo primero es saber que podemos utilizar cualquier editor de texto: pluma, nano, gedit, leftpad, xpad entre otros.
Sería recomdable agregar en la primer línea del script lo siguiente:
#!/bin/bash
#! A la siguiente expresión en los sistemas basados en UNIX se la conoce con el nombre de Shebang. Sirve para indicar a continuación de ella la ruta al intérprete que utilizará el script /bin/bash .
Un vez escrito el script lo guardamos con la extensión .sh
ejemplo: miscript.sh
Luego por lo general deberíamos darle al script un permiso de ejecución como programa.
Para eso hacemos clic derecho sobre el script y en el menú vamos a propiedades.
Por último se abre un ventana y nos dirigimos a la pestaña permisos. Buscarmos allí activar la opción "Permitir ejecutar el archivo como un programa".
¿Cómo ejecutamos un script?
Ir a Bash en el directorio en cual se encuentra el archivo y colocar ejemplo: ./miscript.sh
Ejercicio A
Realizar un scrpt que pueda armar toda la estructura de directorios construida en ejercicio 1 de Bash.
Antes de empezar a escribir debemos borrar lo realizado en el ejercicio 1.
Al final del script agregar un comentario con los nombres de los autores.
Para colocar un comentario en un script utilizamos #.
Ejemplo:
# Autor Carlos Rodríguez 9º5
El nombre del script debe ser: ejerA.sh
Colocar en el foro una captura de la ejecución del script y verificar si existen errores.
Ejercicio B
Realizar un scrpt que pueda armar toda la estructura de directorios construida en ejercicio 2 de Bash:
Antes de empezar a escribir debemos borrar lo realizado en el ejercicio 2.
Al final del script agregar un comentario con los nombres de los autores.
Para usar el comando echo colocamos: echo "el mensaje a mostrar".
En el final de la ejecución con el comando echo el script debe decir los siguiente: "el script ha terminado".
Ejemplo:
# Autor Carlos Rodríguez 9º5
El nombre del script debe ser: ejerB.sh
Colocar en el foro una captura de la ejecución del script y verificar si existen errores.
Ejercicio C
Realizar un scrpt que pueda armar toda la estructura de directorios construida en ejercicio 3 de Bash.
Antes de empezar a escribir debemos borrar lo realizado en el ejercicio 3.
Al final del script agregar un comentario con los nombres de los autores.
En el final de la ejecución con el comando echo el script debe decir los siguiente: "el script ha terminado".
Agregar "en la hora" y una línea abajo mostrar la fecha.
Pista: buscar qué comando muestra fecha y hora en bash.
Ejemplo:
# Autor Carlos Rodríguez 9º5
El nombre del script debe ser: ejerC.sh
Colocar en el foro una captura de la ejecución del script y verificar si existen errores.
Ejercicio D
Crear un script que vaya automáticamente al directorio /home/tercero5.
La virgulilla ~ resume escribir toda la ruta del usuario. Por ende colocar ~ es igual a colocar /home/tercero5 o cualquier otro usuario.
El script debe crear la siguiente estructura:
En el script se debe implementar una solución en una línea, sin generar mensajes de advertencia, donde solo se borren los archivos txt .
Pistas: Al utilizar el comando para borrar archivos o directorios le indicamos el nombre, si queremos identificar a un grupo de archivos que comparten algo en común en su nombre podemos hacerlo con *. Por ejemplo, si tenemos los archivos: preparar.txt , presentar.txt y preguntar.txt podemos refermos a ellos como pre*.txt, esto significa que la expesión aluda a todos los nombre que comienzan con pre seguidos de cualquier combinación de letras y termian en .txt .
Al final del script agregar un comentario con los nombres de los autores.
En el final de la ejecución con el comando echo el script debe decir los siguiente: "el script ha terminado".
Agregar "en la hora" y una línea abajo mostrar la fecha.
Pista: buscar qué comando muestra fecha y hora en bash.
Ejemplo:
# Autor Carlos Rodríguez 9º5
El nombre del script debe ser: ejerD.sh
Colocar en el foro una captura de la ejecución del script y verificar si existen errores.
¿Qué es una variable de entorno?
Una variable de entorno se utiliza para establecer o guardar un valor determinado en el contexto de un intérprete de línea de comandos. De esa forma proporcionar información para ser utilizada entre los diferentes programas o comandos.
Existen algunas variables de entorno que son comunes y están definidas por el sistema operativo como por ejemplo USER allí se contiene el nombre del usuario logueado.
Si queremos hacer uso del valor contenido en la variable de entorno debemos agregar el simbolo $ antes nuestra variable.
Ejemplo si queremos imprimir el valor de USER ejecutamos: echo $USER
echo "hola $USER" en este caso el mensaje será presentado en Bash sustituyendo "$USER" por su valor, ejemplo: "hola Seba".
¿Cómo definimos nuevas variables de entorno?
export VARIABLE=mensaje Aclaración no debe existir espacios antes o después del signo de igual.
Esta variable estará definida durante el uso de esa terminal. Es decir, si cerramos la terminal y abrimos otra ya no disponemos del valor agregado.
Ejercicio E
Crear un script en donde se muestren en pantalla el valor de las siguientes variables:
USER
HOME
OS
SHELL
LANG
Definir una varibale de entorno con el nombre NOVENO5 con el mensaje "este noveno 5 pertenece al año 2025"
Al final del script agregar un comentario con los nombres de los autores.
Ejemplo:
# Autor Carlos Rodríguez 9º5
En el final de la ejecución con el comando echo el script debe decir los siguiente: "el script ha terminado".
Agregar "en la hora" y una línea abajo mostrar la fecha.
Mostrar en pantalla el calendario del mes corriente.
El nombre del script debe ser: ejerE.sh
Colocar en el foro una captura de la ejecución del script y verificar si existen errores.
Ejercicio F
Dibuja la estructura en forma de árbol resultante de aplicar el siguiente script.
#!/bin/bash
mkdir soporte
cd sporte
mdkir sistemas impresoras gabinetes
cd sistemas
touch windows.txt
cd ..
cd impresoras
touch láser.txt
cd ..
tree
ESTRUCTURAS DE CONTROL
La estructura de control conocido como "for" es utilizada para iterar, es decir, repetir muchas veces un bloque de comandos.
La forma en que la esctructura funciona la describimos a continuación.
-Tiene un inicio y un fin. Dentro tendremos instrucciones cuyo alcance solamente es válido dentro del mismo "for". A este conjunto de instrucciones también se le puede conocer como bloque del "for".
- El bloque del "for" se ejecutará desde 0 (cero) veces y hasta la cantidad de veces que se defina.
- En general la estrategia para llevar adelante cada iteración se relaciona con la recorrida de un conjunto, a la par de la ejecución de un bloque.
Ejemplo:
for i in {1..5};do
echo "hola $i"
done
El inicio y el fin está descripto por las líneas: "for ... ;do" y "done". Todo lo que está dentro de estas lineas es el bloque y serán las instrucciones que se ejecuten en cada iteración.
En el ejemplo se ejecutará el bloque 5 veces, es decir, es equivalente escribir lo anterior como:
echo "..."
echo "..."
echo "..."
echo "..."
echo "..."
¿Cómo controlo la cantidad de repeticiones?
Como dijimos anteriormente la estrategia se basa en la recorrida de un conjunto, es decir, si el conjunto que utilizaré para iterar tiene 3 elementos, el bloque del "for" ejecutará 3 veces.
Algunos ejemplos en pseudocódigo, es decir, algo que nosotros leemos e interpretamos, pero no es código válido para la máquina.
for entrada in {todas mis entradas};do
entregar $entrada
subir al juego
....
bajar del juego
done
Si quiero repetir un bloque de instrucciones con pequeñas variaciones. ¿De qué manera puedo utilizar el "for"?
Para que cada iteración tenga pequeñas variaciones utilizamos el elemento actual del conjunto que recorremos.
Una acción repetitiva puede ser que cada uno de ustedes diga su nombre, apellido y fecha de compleaños. Cada uno de ustedes hace lo mismo lo que varía son los datos que brindan.
for estudiante in {salón};do
echo "$estudiante"
done
¿Qué mecanismos válidos tengo para escribir un "for"?
*nota la "i" que integra cada ejemplo puede tener cualquier otro nombre.
-iterar en un rango: i in {1..5} en este caso "i" varía entre 1 y 5.
i in {a..z}
-iterar en el conjunto de nombre de archivos: i in D* en este caso "i" toma los nombres de aquellos arhivos o directorios que empiezan con "D" (recordar el uso de los * en shellscript).
-aqui el "for" puede iterar sobre la salida de pantalla de un comando: i in $(ls) en este caso es el comando "ls".
Ejercicio G
¿Qué realiza el siguiente script? Redacta brevemente tu respuesta.
#!/bin/bash
cd /etc
for i in h*s; do
echo "$i"
done
Ejercicio H
Escribe en la hoja las salidas de pantalla realizadas por la siguiente estructura.
#!/bin/bash
for i in {1..7}; do
echo "lo hago $i"
done
tree
Ejercicio I
En base al siguiente código responde las siguientes preguntas:
#!/bin/bash
mkdir candidatos
cd ~/candidatos
for i in {1..10}
do
touch candidatos/narchivo$i.txt
echo "Este es el archivo narchivo$i" > candidatos/narchivo$i.txt
done
ls *.txt <-----
rm -r *.txt <-----
A- Escribe la ruta de dirección entera a la cual ingresa nuestro script.
B- ¿Qué se hace en la línea 9 del script?
C- ¿Que realiza en la línea 10 en nuestro script?
D- Corrobora si tu respuesta fue correcta ejecutando el script.
Ejercicio J
Crear un carpeta llamada pruebas y dentro 25 directorios con el nombre carpetas1, carpeta2, carpeta3....carpeta25
Ejercicio K
Imprimir en pantalla todos los directorios dentro de pruebas que terminen con 3.
La estructura de "while" se describe de la siguiente forma:
while [condición];do
...
done
Lo que determina que la escritura "while" ejecute su bloque de instrucciones es la evalución de su condición. Al inicio de cada iteración se comprueba el valor de la condición. En caso de ser verdadera se ejecuta una vez el bloque, al finalizar se vuelve a consultar la condición. En caso de ser falsa se finaliza el bucle, de lo contrario sigue la repetición.
number=10
while (($number > 5)) ;do
echo $number
number=$(($number-1))
done
*Nota aclaración los parentesis rectos son sustituídos por () comunes y dobles (()) para ejecutar comparaciones numéricas.
Ejercicio L
numberA=10
numberB=0
while (($numberA != $numberB )) ;do
echo "A: $numberA B: $numberB"
numberA=$(($numberA -1))
numberB=$(($numberB +1))
done
1- Realizar una breve descripción en tu cuaderno de lo que entiendas que haya ejecutado el script.
2- Crear el script con el nombre pruebaWhile.sh, luego ejecutarlo para conocer qué sucede.
Ejercicio M
1- Crear un carpeta llamada prueba y allí colocar el script propuesto en el ejercicio.
2- Completar el script sustituyendo todas las apariciones "..." por lo que corresponda para que el
resultado de la ejecución genere 5 carpetas llamadas:
carpeta_2
carpeta_3
carpeta_4
carpeta_5
carpeta_6
iterador=...
while (($...)) ;do
... "carpeta_$iterador"
iterador=$(($...))
done
El uso de if en un shell script permite ejecutar comandos condicionalmente, dependiendo de si se cumple o no una condición. La estructura básica del if en shell scripting es la siguiente:
if [ condición ]; then
# Código a ejecutar si la condición es verdadera
else
# Código a ejecutar si la condición es falsa
fi
Estructura básica
if: Inicia la estructura condicional.
[ condición ]: La condición a evaluar. Los corchetes [ ] son equivalentes al comando test.
then: Indica el inicio del bloque de código que se ejecutará si la condición es verdadera.
else: Opcional. Indica el bloque de código que se ejecutará si la condición es falsa.
fi: Finaliza la estructura if.
Uso de operadores dentro de la estructura if
gt: Mayor que (>).
lt (menor que)
eq (igual a)
ne (no igual)
ge (mayor o igual)
le (menor o igual).
ejemplo:
if [ $a -gt $b ]; then
echo "$a es mayor que $b"
else
echo "$a no es mayor que $b"
fi
Ejercicio N
Escribir un script que pedirá al usuario ingresar un número y luego determinará si el número es positivo, negativo o cero.
El script se llamará: verificar_numero.sh
Pistas: Pedimos un número por medio 'echo' y luego lo leémos con 'read'
Ejercico O
Escribir un script para solicitar al usuario ingresar un número y determinar si es mayor que 10. Si es mayor, debe mostrar "El número es mayor que 10"; de lo contrario, debe mostrar "El número es menor o igual a 10".
Ejercicio P
Crear un script para solicitar al usuario ingresar su edad y determinar si es mayor o igual a 18. Si lo es, debe mostrar "Eres mayor de edad"; si no, debe mostrar "Eres menor de edad".
Tareas programadas Cron.
Cron es una herramienta que permite ejecutar comandos o scripts en momentos específicos de manera automática. Para configurar una tarea, se edita el archivo crontab, que es donde se almacenan las instrucciones de las tareas programadas. Cada línea en este archivo representa una tarea y sigue un formato específico: primero se definen los campos de tiempo (minuto, hora, día del mes, mes, día de la semana) y luego el comando o script que se desea ejecutar. Por ejemplo, si quieres que un script se ejecute todos los días a las 3 de la tarde, configurarías algo como:
0 15 * * * /ruta/al/script.sh.
Cron es extremadamente útil para tareas repetitivas como backups, limpieza de archivos temporales o actualizaciones periódicas.
ejemplo
Abrir la terminal.
Editar el archivo crontab
cromtab -e
Agregrar al archivo:
0 2 * * * /home/seba/script_de_respaldo.sh
¿Cómo trabaja lo hecho antes?
Explicación punto a punto:
0: El minuto 0 (es decir, justo al comienzo de la hora).
2: La hora 2 (2:00 AM).
*: Un asterisco en el campo del día del mes significa "cualquier día".
*: Un asterisco en el campo del mes significa "cualquier mes".
*: Un asterisco en el campo del día de la semana significa "cualquier día de la semana".
/home/seba/script_de_respaldo.sh: La ruta completa al script que deseas ejecutar.
A diferencia de Cron, que programa tareas recurrentes, 'at' se usa para ejecutar una tarea una sola vez en un momento específico. Por ejemplo, si quieres que un comando se ejecute a las 10 de la noche hoy, usarías algo como:
Abrir la terminal y escriir:
at 22:00 seguido del comando que deseas ejecutar.
En el prompt que aparece, ingresa el comando:
echo "Tarea ejecutada a las 10 PM" > /home/user/reporte.txt
Presionar Ctrl+D para guardar y salir.
Para el caso batch, es similar a at, pero en lugar de ejecutar la tarea en un momento exacto, la ejecuta cuando el sistema tiene una carga de trabajo baja, lo que lo hace ideal para tareas que no son urgentes y pueden esperar a que el sistema esté menos ocupado. Ambos comandos son útiles para tareas puntuales que no requieren la repetición que ofrece Cron.
Entonces podemos decir: at y batch se usan para tareas puntuales, no recurrentes. Con at, se programa una ejecución única en un momento exacto; por ejemplo, at 22:00 seguido de un comando ejecutará este a las 10:00 PM del día indicado. Es útil cuando se necesita realizar una acción específica una sola vez. Batch, en cambio, es similar a at, pero no fija un horario preciso. Ejecuta la tarea cuando el sistema tiene una carga baja, lo que lo hace ideal para procesos no urgentes que pueden esperar, como cálculos pesados o mantenimientos secundarios.
Abrir la terminal y escriir:
batch
En el prompt que aparece, ingresa el comando:
/home/user/tarea_larga.sh
Presionar Ctrl+D para guardar y salir.
La diferencia clave entre cron y at/batch radica en la recurrencia: cron automatiza tareas cíclicas, mientras que at y batch gestionan ejecuciones únicas. Entre at y batch, la distinción está en la prioridad temporal: at respeta un horario fijo, batch prioriza la eficiencia del sistema. Estas herramientas, bien utilizadas, optimizan la administración de recursos y tiempo en entornos Unix, adaptándose a necesidades específicas de programación de tareas.
Ejercicio Q
Crear una tarea con crontab para que un script llamado limpieza.sh, ubicado en /home/user, se ejecute todos los días a las 8:00 AM.
Ejercico R
Configura una tarea con at para que el comando echo "Tarea completada" > /home/user/tarea.txt se ejecute hoy a las 5:30 PM.
Ejercico S
Usa batch para ejecutar el script procesamiento.sh, ubicado en /home/user, cuando el sistema esté con baja carga de trabajo.
Nuestros scripts con estilo
Dialog es una herramienta en Linux que permite crear interfaces de usuario interactivas en la terminal usando la biblioteca ncurses. Es ideal para scripts de shell que necesitan mostrar menús, formularios, mensajes o solicitar entradas del usuario, especialmente en entornos sin interfaz gráfica. Es ligera, estable y está disponible en casi todas las distribuciones de Linux.
La instalación de Xdialog depende del sistema operativo y su gestor de paquetes. Aquí te doy instrucciones para algunas distribuciones comunes de Linux:
sudo apt install dialog # Para Debian/Ubuntu
sudo dnf install dialog # Para Fedora
sudo pacman -S dialog # Para Arch Linux
Otras distribuciones:
descargar el código desde http://invisible-island.net/dialog/
tar -xvzf dialog-1.3-20210324.tgz
cd dialog-1.3-20210324
compilar e instalar el módulo
./configure
make
./configure --prefix=/usr/local
sudo make install
Verificar qué versión de xdialog tenemos instalada:
dialog --version
Ejemplo
-----------------------------------------------------------------------------------------------
#!/bin/bash
# Archivo: menu_dialog.sh
# Crear un menú con dialog
dialog --title "Menú Principal" \
--menu "Selecciona una opción:" 15 50 4 \
1 "Mostrar fecha actual" \
2 "Listar archivos" \
3 "Salir" 2> /tmp/opcion_seleccionada
# Leer la opción seleccionada
opcion=$(cat /tmp/opcion_seleccionada)
rm /tmp/opcion_seleccionada
# Procesar la selección
case $opcion in
1)
dialog --msgbox "La fecha actual es: $(date)" 10 40
;;
2)
dialog --msgbox "Archivos en el directorio: $(ls -lh | tail -n +2)" 20 60
;;
3)
dialog --msgbox "¡Adiós!" 10 30
exit 0
;;
*)
dialog --msgbox "Opción inválida" 10 30
;;
esac
# Volver a ejecutar el script para mantener el menú activo
exec $0
-----------------------------------------------------------------------------------------------
Breve explicación:
--title: Define el título del cuadro de diálogo.
--menu: Crea un menú con opciones numeradas. Los parámetros 15 50 4 indican altura, ancho y número de opciones.
2> /tmp/opcion_seleccionada: Redirige la selección del usuario a un archivo temporal.
case: Procesa la opción elegida y muestra un mensaje (--msgbox) con información relevante.
exec $0: Reinicia el script para mantener el menú activo (opcional).
Ejercicios
ejercicio 0
Crear un script para dar una bienvenida "¡Bienvenido a Linux!"
ejercicio 3
Crea un script en Linux usando dialog que:
Pida al usuario ingresar un número en un cuadro de texto.
Muestre un mensaje diciendo si el número es mayor o menor que 10.
El script termina después de mostrar el mensaje.
ejercicio 4
Crea un script en Linux usando dialog que:
Muestre un menú con dos opciones: "Ver la hora" y "Salir".
Si se elige "Ver la hora", muestre la hora actual en un mensaje.
Si se elige "Salir", termine el script sin mostrar nada más.