Resolución de los ejercicios del Curso de Bash Scripting

Contenido

Ejercicio Nº 1: Hola Mundo!!

Desarrolla un programa en Bash que imprima el mensaje «Hola Mundo» en la consola utilizando el comando echo. El programa debe ser guardado en un archivo con extensión .sh y debe tener permisos de ejecución. Cuando se ejecute el programa, debería imprimirse el mensaje «Hola Mundo» en la consola.

Resolución:

  1. Abre tu editor de texto favorito y crea un nuevo archivo. Para este ejemplo, llamaremos al archivo «holamundo.sh».

  2. Escribe el siguiente código en el archivo:

				
					#!/bin/bash
echo "Hola Mundo"

				
			

La primera línea #!/bin/bash indica al sistema operativo que se debe utilizar el intérprete de comandos Bash para ejecutar el script. La segunda línea usa el comando «echo» para imprimir el mensaje «Hola Mundo» en la consola.

  1. Guarda el archivo y asegúrate de darle permisos de ejecución utilizando el siguiente comando:
				
					chmod +x holamundo.sh

				
			

Este comando agrega permisos de ejecución al archivo «holamundo.sh».

  1. Para ejecutar el programa, en la terminal o línea de comandos, navega hasta la ubicación donde se encuentra el archivo «holamundo.sh» y escribe el siguiente comando:
				
					./holamundo.sh

				
			

El resultado en la consola será la impresión del mensaje «Hola Mundo».

¡Y eso es todo! Con estos sencillos pasos has creado un programa en Bash que imprime «Hola Mundo» en la consola.

Lectura recomendada

Link de Compra en Amazon: 
🛒 https://amzn.to/3ZMRl86

Contenido del libro:

A través de conceptos básicos, análisis de vulnerabilidades, técnicas de ataque y contramedidas, descubrirás cómo los administradores pueden pensar como hackers para fortalecer redes, servidores y aplicaciones contra amenazas. Con ejercicios prácticos y explicaciones claras, es la guía perfecta para estudiantes y profesionales interesados en la ciberseguridad.

Link de Compra en Amazon: 
🛒 https://amzn.to/41LHXEd

Kit todo en uno para exploración tecnológica: incluye el Flipper Zero, una tarjeta de desarrollo WiFi, una funda de silicona, una tarjeta MicroSD de 32 GB y un adaptador MicroSD a SD, que ofrece todo lo que necesita para comenzar sus proyectos tecnológicos y de seguridad cibernética.

Ejercicio Nº 2: Variables en Bash Scripting

Crea un script de Bash que declare y asigne valores a las siguientes variables:

  • «nombre» con valor «Firox».
  • «nombres» con valores «Juan», «Pedro», «Manolo» y «Paco» .
  • «edad» con valor «80».
  • «PI» con valor «3,14».
  • «ruta» con el valor de la ruta actual del directorio.
  • «primerArgumento» con el valor del primer argumento que se pase al script.
  • «segundoArgumento» con el valor del segundo argumento que se pase al script.
  • «shell» con el valor de la variable de entorno SHELL.

Luego, imprime en la consola el valor de cada variable utilizando el comando «echo».

  • Abre un editor de texto (p. ej., Visual Studio Code).
  • Crea un archivo nuevo y guárdalo con el nombre que desees, pero con la extensión «.sh» al final para indicar que es un script de Bash (p. ej., «variables.sh»).
  • Abre el archivo con el editor de texto y agrega el siguiente contenido:
				
					code variables.sh

				
			
				
					#!/bin/bash

# Variables
nombre=Firox
nombres=("Juan" "Pedro" "Manolo" "Paco")
edad=80
PI=3,14
ruta=$(pwd)
primerArgumento=$1
segundoArgumento=$2
sumaArgumentos=$(($1 + $2))
shell=$SHELL

# Imprimir valores de variables
echo "Mi nombre es $nombre"
echo "Y mi vecino se llama ${nombres[0]} y tiene una edad de $edad años."
echo "El número Pi es igual a $PI"
echo "[+] Estoy en la ruta: $ruta"
echo "[+] El primer argumento es $primerArgumento y el segundo es $segundoArgumento"
echo "La suma de los argumentos es $sumaArgumentos"
echo "La variable de entorno SHELL es $shell"

				
			
  • nombre: Esta variable almacena una cadena de caracteres con el valor «Firox». En este caso, se utiliza para representar el nombre de una persona, pero puede contener cualquier tipo de información que se pueda representar como texto.
  • nombres: Esta variable almacena un array de cadenas de caracteres con los valores «Juan», «Pedro», «Manolo» y «Paco». Los arrays en Bash se definen utilizando paréntesis y los valores se separan por espacios. En este caso, se utiliza para representar los nombres de varias personas, pero se puede usar para almacenar cualquier tipo de datos que se puedan representar como una lista.
  • edad: Esta variable almacena un número entero con el valor «80». En este caso, se utiliza para representar la edad de una persona, pero se puede usar para almacenar cualquier tipo de datos que se puedan representar como un número entero.
  • PI: Esta variable almacena un número con el valor «3,14». En este caso, se utiliza para representar el número Pi, pero se puede usar para almacenar cualquier tipo de datos que se puedan representar como un número con decimales.
  • ruta: Esta variable almacena una cadena de caracteres con el valor de la ruta actual del directorio, que se obtiene utilizando el comando «pwd». En este caso, se utiliza para representar la ruta del directorio actual, pero se puede usar para almacenar cualquier tipo de datos que se puedan representar como una ruta de archivo o directorio.
  • primerArgumento y segundoArgumento: Estas variables almacenan los valores del primer y segundo argumento que se pasan al script, respectivamente. Los argumentos son valores que se pasan al script cuando se ejecuta, separados por espacios. En este caso, se utilizan para representar valores numéricos que se pueden sumar.
  • sumaArgumentos: Esta variable almacena la suma de los valores de primerArgumento y segundoArgumento, que se calcula utilizando el operador aritmético de Bash «$((…))». En este caso, se utiliza para calcular la suma de los argumentos numéricos que se pasan al script.
  • shell: Esta variable almacena el valor de la variable de entorno «SHELL», que representa la ruta del shell (Intérprete de Comandos) utilizado actualmente en la terminal. En este caso, se utiliza para mostrar información sobre el shell que se está utilizando actualmente.

Ejercicio Nº 3: Lotería

Desarrolla un script en Bash que:

  1. Solicite al usuario ingresar un número del 1 al 20.
  2. Si el número ingresado es igual a 8, el script debe imprimir «Premio Gordo» en la consola.
  3. Si el número ingresado es igual a 3, el script debe imprimir «Segundo Premio» en la consola.
  4. En cualquier otro caso, el script debe imprimir «Sigue jugando» en la consola.
  5. Guarda el script en un archivo con extensión «.sh» y asegúrate de darle permisos de ejecución.

Cuando se ejecute el script, debería solicitar al usuario ingresar un número y mostrar el mensaje correspondiente según la condición cumplida.

Resolución:

  • La primera línea #!/bin/bash indica al sistema operativo que se debe utilizar el intérprete de comandos Bash para ejecutar el script.

  • El comando «echo» se utiliza para imprimir un mensaje en la consola, indicando al usuario que ingrese un número del 1 al 20. La opción «-e» se utiliza para habilitar la interpretación de caracteres especiales como «\n», que se usa para imprimir un salto de línea antes del mensaje.

				
					#!/bin/bash

echo -e "\n[+]Ingresa un número del 1 al 20 : \n"


				
			
  • El comando «read» se utiliza para leer la entrada del usuario y almacenarla en la variable «num». La variable «num» se utilizará más adelante en el script.
				
					#!/bin/bash

echo -e "\n[+]Ingresa un número del 1 al 20 : \n"
read num


				
			
  • Se utiliza un condicional «if-elif-else» para evaluar el valor de «num» y decidir qué mensaje debe imprimirse en la consola. El condicional comienza con la palabra clave «if», seguida de la condición que se debe evaluar. En este caso, la condición es si «num» es igual a 8.
				
					#!/bin/bash

echo -e "\n[+]Ingresa un número del 1 al 20 : \n"
read num

if [ $num -eq 8 ]; then

fi


				
			
  • Si la condición del «if» se cumple, se ejecuta el bloque de código que está dentro de él. En este caso, el bloque de código simplemente imprime «Premio Gordo» en la consola.
				
					#!/bin/bash

echo -e "\n[+]Ingresa un número del 1 al 20 : \n"
read num

if [ $num -eq 8 ]; then
    echo -e "\nPremio Gordo"
fi


				
			
  • Si la condición del «if» no se cumple, se pasa a la siguiente condición en el condicional, que comienza con la palabra clave «elif». En este caso, la condición es si «num» es igual a 3.
  • Si la condición del «elif» se cumple, se ejecuta el bloque de código que está dentro de él. En este caso, el bloque de código simplemente imprime «Segundo Premio» en la consola.
				
					#!/bin/bash

echo -e "\n[+]Ingresa un número del 1 al 20 : \n"
read num

if [ $num -eq 8 ]; then
    echo -e "\nPremio Gordo"
elif [ $num -eq 3 ]; then
    echo -e "\nSegundo Premio"
fi


				
			
  • Si la condición del «elif» no se cumple, se ejecuta el bloque de código que está dentro del «else». En este caso, el bloque de código simplemente imprime «Sigue jugando» en la consola.
  • El condicional termina con la palabra clave «fi», que indica el final del bloque de código.
				
					#!/bin/bash

echo -e "\n[+]Ingresa un número del 1 al 20 : \n"
read num

if [ $num -eq 8 ]; then
    echo -e "\nPremio Gordo"
elif [ $num -eq 3 ]; then
    echo -e "\nSegundo Premio"
else
    echo -e "\nSigue jugando"
fi


				
			
  • Una vez que se ha ejecutado el condicional, el script termina.
  • Finalmente, debes dar permisos de ejecución al script utilizando el comando «chmod». La opción «+x» indica que se deben dar permisos de ejecución al archivo.
  • Para ejecutar el script, debes utilizar el comando «./» seguido del nombre del archivo:
				
					chmod +x loteria.sh

				
			
				
					./loteria.sh

				
			

¡Y eso es todo! Este es un ejemplo básico de cómo utilizar condicionales en un script de Bash para controlar el flujo del programa en función de la entrada del usuario.

Ejercicio Nº 4: Mayor o menor

Escribe un script de Bash que pida al usuario ingresar dos números y luego los compare para determinar cuál es mayor, cuál es menor o si son iguales. La respuesta del ejercicio debe ser el script Bash proporcionado que realiza la comparación de números.

Resolución:

  • La primera línea #!/bin/bash indica al sistema operativo que el archivo es un script de Bash y debe ser ejecutado por el intérprete de Bash.

  • La siguiente línea echo -e "\n$[+] Ingresa los dos número que quieras comparar:\n" muestra un mensaje en la terminal que pide al usuario que ingrese dos números para ser comparados. El uso de -e en la opción echo permite la interpretación de caracteres especiales como \n (salto de línea).

  • Las siguientes dos líneas read num1 y read num2 leen los dos números que el usuario ingresa desde la terminal y los almacenan en las variables num1 y num2, respectivamente.

				
					#!/bin/bash

echo -e "\n$[+] Ingresa los dos número que quieras comparar:\n"

read num1
read num2
				
			
  • La siguiente línea if [ $num1 -eq $num2 ]; then es una estructura de control if que evalúa si el valor de num1 es igual al valor de num2. Si los valores son iguales, entonces se ejecuta el siguiente bloque de código dentro del if.

  • La línea echo -e "\n Los dos números son iguales." muestra un mensaje en la terminal que indica que los dos números ingresados son iguales.

				
					#!/bin/bash

echo -e "\n$[+] Ingresa los dos número que quieras comparar:\n"

read num1
read num2

if [ $num1 -eq $num2 ]; then
    echo -e "\n Los dos números son iguales."
fi
				
			
  • Si los valores de num1 y num2 no son iguales, el siguiente bloque de código dentro del if se salta y se ejecuta la siguiente línea elif [ $num1 -gt $num2 ]; then.

  • La línea elif [ $num1 -gt $num2 ]; then es otra estructura de control if que evalúa si el valor de num1 es mayor que el valor de num2. Si num1 es mayor que num2, entonces se ejecuta el siguiente bloque de código dentro del elif.

  • La línea echo -e "\n El número $num1 es mayor que $num2" muestra un mensaje en la terminal que indica que num1 es mayor que num2.

				
					#!/bin/bash

echo -e "\n$[+] Ingresa los dos número que quieras comparar:\n"

read num1
read num2

if [ $num1 -eq $num2 ]; then
    echo -e "\n Los dos números son iguales."
elif [ $num1 -gt $num2 ]; then
    echo -e "\n El número $num1 es mayor que $num2"
fi

				
			
  • Si num1 no es mayor que num2, el siguiente bloque de código dentro del elif se salta y se ejecuta la siguiente línea else.

  • La línea else es una estructura de control if que se ejecuta si ninguna de las condiciones anteriores es verdadera. En este caso, significa que num1 es menor que num2.

				
					#!/bin/bash

echo -e "\n$[+] Ingresa los dos número que quieras comparar:\n"

read num1
read num2

if [ $num1 -eq $num2 ]; then
    echo -e "\n Los dos números son iguales."
elif [ $num1 -gt $num2 ]; then
    echo -e "\n El número $num1 es mayor que $num2"
else
    echo -e "\n El número $num1 es menor que $num2"
fi

				
			
  • La línea echo -e "\n El número $num1 es menor que $num2" muestra un mensaje en la terminal que indica que num1 es menor que num2.

  • El script termina con la palabra clave fi que indica el final de la estructura de control if.

Ejercicio Nº 5: Par o Impar

Desarrolla un script en Bash para determinar si la suma de dos números es par o impar. Para lograr esto, el script debe seguir los siguientes pasos:

  1. Leer los dos números ingresados como argumentos.
  2. Sumar los dos números.
  3. Verificar si la suma es un número par o impar usando el operador módulo.
  4. Imprimir el resultado: «El número [suma] es un número par.» o «El número [suma] es un número impar.» según corresponda.

Resolución:

  • Abre un editor de texto y crea un nuevo archivo. Por ejemplo, puedes nombrar el archivo «par-impar.sh».

  • Agrega el siguiente encabezado al archivo para indicar que se usará el intérprete de Bash:

    #!/bin/bash

  • Agrega las siguientes líneas de código para leer los dos números ingresados como argumentos y almacenarlos en variables:

    variable1=$1 variable2=$2

				
					#!/bin/bash

variable1=$1
variable2=$2

				
			
  • La variable «$1» representa el primer argumento y «$2» representa el segundo argumento. Estos valores se asignan a las variables «variable1» y «variable2», respectivamente.

  • Agrega las siguientes líneas de código para sumar los dos números:

    suma=$(($variable1 + $variable2))

    La variable «suma» contiene el resultado de la suma de «variable1» y «variable2».

				
					Agrega las siguientes líneas de código para verificar si la suma es un número par o impar:

if [ $((suma % 2)) -eq 0 ]; then echo "El número $suma es un número par." else echo "El número $suma es un número impar." fi

La expresión "$((suma % 2))" calcula el resto de la división de "suma" por 2. Si el resultado es 0, entonces la suma es un número par. Si el resultado es diferente de cero, entonces la suma es un número impar. La sentencia "if" verifica el resultado y imprime el mensaje correspondiente usando la sentencia "echo".
				
			
  • Agrega las siguientes líneas de código para verificar si la suma es un número par o impar:

    if [ $((suma % 2)) -eq 0 ]; then echo «El número $suma es un número par.» else echo «El número $suma es un número impar.» fi

    La expresión «$((suma % 2))» calcula el resto de la división de «suma» por 2. Si el resultado es 0, entonces la suma es un número par. Si el resultado es diferente de cero, entonces la suma es un número impar. La sentencia «if» verifica el resultado y imprime el mensaje correspondiente usando la sentencia «echo».

				
					#!/bin/bash

variable1=$1
variable2=$2

suma=$(($variable1 + $variable2))

if [ $((suma % 2)) -eq 0 ]; then
    echo "El número $suma es un número par"
else
    echo "El número $suma es un número impar."
fi
				
			
  • Guarda el archivo y ciérralo.

  • Abre una terminal y cambia al directorio donde guardaste el archivo «par-impar.sh».

  • Otorga permisos de ejecución al archivo usando el siguiente comando:

    chmod +x par-impar.sh

  • Ejecuta el archivo usando los dos números que quieres sumar como argumentos. Por ejemplo, si quieres sumar los números 3 y 5, ejecuta el siguiente comando:

    ./par-impar.sh 3 5

    El resultado debe ser:

    El número 8 es un número par.

Ejercicio Nº 6: Listar archivos

Crear un script en Bash que imprima todos los nombres de archivo en el directorio actual utilizando un bucle for.

Resolución:

Este script es un ejemplo de cómo utilizar el lenguaje de scripting Bash para interactuar con el sistema de archivos y realizar tareas automatizadas en el sistema.
				
					#!/bin/bash

echo -e "\n[+] Hola $USER"
echo -e "\n[+] Te encuentras en la ruta: \n\n $(pwd)\n"

for i in *; do
    echo -e "$(ls -l $i | awk '{print $1, $NF}')"
done
				
			

La primera línea indica que el script se ejecutará en el intérprete de comandos Bash. La segunda línea utiliza el comando echo para imprimir un mensaje en la pantalla que saluda al usuario actual del sistema, cuyo nombre se obtiene mediante la variable de entorno $USER. El argumento -e se utiliza para permitir el uso de secuencias de escape en el mensaje.

				
					#!/bin/bash

echo -e "\n[+] Hola $USER"

				
			

La tercera línea utiliza el comando echo para imprimir un mensaje en la pantalla que indica la ruta actual del usuario en el sistema de archivos, que se obtiene mediante el comando pwd. El mensaje también incluye secuencias de escape para crear líneas en blanco antes y después del mensaje.

				
					echo -e "\n[+] Te encuentras en la ruta: \n\n $(pwd)\n"

				
			

La cuarta línea es el inicio de un bucle for que se utiliza para iterar a través de los archivos y directorios en el directorio actual (indicado por el comodín *). En cada iteración del bucle, el nombre del archivo o directorio se almacena en la variable i.

				
					for i in *; do
    echo -e "$(ls -l $i | awk '{print $1, $NF}')"
done
				
			

Dentro del bucle, se utiliza el comando ls -l $i para obtener información detallada sobre el archivo o directorio, incluyendo los permisos de acceso, el propietario y la fecha de modificación. Esta información se pasa a través de un pipe (|) al comando awk, que se utiliza para imprimir los permisos y el nombre del archivo o directorio en el formato «permisos nombre».

Finalmente, se utiliza el comando echo para imprimir la salida de awk en la pantalla, incluyendo secuencias de escape para crear líneas en blanco antes y después de cada línea.

Ejercicio Nº 7: Contador de archivos de texto

Escribe un script Bash que use un bucle for para iterar a través de los archivos en un directorio, y para cada archivo que tenga la extensión «.txt», el script debe imprimir el nombre del archivo y la cantidad de líneas que contiene.