Ejercicios Prácticos de Scripting Bash
Múltiplo de Diez
Comprueba si un número introducido por el usuario es múltiplo de 10.
read -p "Introduce un número: " num
if (( num % 10 == 0)); then
echo "$num es múltiplo de 10"
else
echo "$num no es múltiplo de 10"
fi
Nombre Comienza con J
Verifica si un nombre introducido comienza con la letra ‘J’ mayúscula.
read -p "Introduce un nombre: " nombre
if [[ $nombre == J* ]]; then
echo "El nombre '$nombre' comienza con la letra J mayúscula."
else
echo "El nombre '$nombre' NO comienza con la letra J mayúscula."
fi
Mayor Altura
Determina la mayor altura entre tres alturas introducidas por el usuario.
read -p "Introduce la altura de la primera persona (en cm): " altura1
read -p "Introduce la altura de la segunda persona (en cm): " altura2
read -p "Introduce la altura de la tercera persona (en cm): " altura3
mayor=$altura1
if (( altura2 > mayor )); then
mayor=$altura2
fi
if (( altura3 > mayor )); then
mayor=$altura3
fi
echo "La mayor altura es: $mayor cm"
Días del Mes
Indica cuántos días tiene un mes introducido por el usuario.
read -p "Introduce el nombre de un mes: " mes
case "$mes" in
"enero"|"marzo"|"mayo"|"julio"|"agosto"|"octubre"|"diciembre")
echo "$mes tiene 31 días."
;;
"abril"|"junio"|"septiembre"|"noviembre")
echo "$mes tiene 30 días."
;;
"febrero")
echo "Febrero tiene 28 días (sin años bisiestos)."
;;
*)
echo "Mes no válido. Introduce el nombre en minúsculas y sin tildes."
;;
esac
Más de Diez Ficheros
Comprueba si hay más de diez archivos en el directorio actual.
cantidad=$(ls -1 | wc -l) # Cuenta el número de archivos y directorios en la carpeta actual
if (( cantidad > 10 )); then
echo "Hay más de 10 archivos en el directorio actual."
else
echo "Hay 10 o menos archivos en el directorio actual."
fi
Menú con Opciones
Presenta un menú con opciones para ejecutar diferentes scripts.
DIRECTORIO="/home/TuNombre/apuntesTuNombre"
echo
echo "¿Qué script quieres ejecutar?"
echo "============================="
echo
echo "1. El script primero.sh"
echo "2. El script capicua.sh"
echo "3. El script parimpar.sh"
echo "4. Salir"
echo
read -p "Elige una opción (1/2/3/4): " opcion
case $opcion in
1) source $DIRECTORIO/primero.sh;;
2) source $DIRECTORIO/capicua.sh;;
3) source $DIRECTORIO/parimpar.sh;;
4) ;;
*) echo "Opción no válida.";;
esac
Comprobar si es Número
Valida si la entrada del usuario es un número.
read -p "Introduce un número: " numero
if [[ $numero =~ ^[0-9]+$ ]]; then
echo "Has introducido el número: $numero"
else
echo "Has introducido algo que no es un número y es: $numero"
fi
Existe Usuario
Verifica si un usuario existe en el sistema.
read -p "Introduce el nombre de un usuario: " usuario
if [ `grep "^$usuario:" /etc/passwd` ]; then
echo "$usuario es un usuario del sistema"
else
echo "$usuario no es un usuario del sistema"
fi
Operación Aritmética
Realiza operaciones aritméticas básicas según la elección del usuario.
# Pedir dos números al usuario
read -p "Introduce el primer número: " num1
read -p "Introduce el segundo número: " num2
echo "=================================="
echo " ¿Qué operación aritmética quieres hacer?"
echo "=================================="
echo "1. SUMAR (NUM1 + NUM2)"
echo "2. RESTAR (NUM1 - NUM2)"
echo "3. MULTIPLICAR (NUM1 * NUM2)"
echo "4. DIVIDIR (NUM1 / NUM2) [División entera]"
echo "5. RESTO (NUM1 % NUM2)"
echo "6. Salir"
echo "=================================="
read -p "Elige una opción (1/2/3/4/5/6): " opcion
case $opcion in
1) resultado=$((num1 + num2))
echo "La suma es $resultado" ;;
2) resultado=$((num1 - num2))
echo "La resta es $resultado" ;;
3) resultado=$((num1 * num2))
echo "La multiplicación es $resultado" ;;
4)
if [ "$num2" -ne 0 ]; then
resultado=$((num1 / num2))
echo "La división es $resultado"
else
echo "Error: No se puede dividir entre cero."
fi ;;
5)
if [ "$num2" -ne 0 ]; then
resultado=$((num1 % num2))
echo "El resto es $resultado"
else
echo "Error: No se puede calcular el resto con divisor 0."
fi ;;
6) echo "Saliendo del programa..."; exit 0 ;;
*) echo "Opción no válida." ;;
esac
Menú de Usuario
Ofrece opciones para interactuar con el directorio personal de un usuario.
read -p "Introduce el nombre de un usuario: " usuario
# Mostrar menú de opciones
echo ""
echo "¿Qué quieres hacer?"
echo "======================="
echo "1. Ver el contenido del directorio personal del usuario"
echo "2. Cambiar al directorio de trabajo personal del usuario"
echo "3. Saber a qué grupos pertenece el usuario"
echo "4. Salir"
echo ""
# Leer la opción del usuario
read -p "Elige una opción (1/2/3/4): " opcion
case $opcion in
1) ls /home/$usuario ;;
2) cd /home/$usuario && pwd ;;
3) groups $usuario ;;
4) echo "Saliendo...";;
*) echo "Opción no válida.";;
esac
Comprobación de Número (Añadido a Operación Aritmética)
Valida que la entrada del usuario sea un número antes de realizar operaciones aritméticas.
es_numero() {
[[ $1 =~ ^-?[0-9]+(\.[0-9]+)?$ ]]
}
# Pedir los dos números
read -p "Introduce el primer número: " num1
read -p "Introduce el segundo número: " num2
# Validar que sean números
if ! es_numero "$num1" || ! es_numero "$num2"; then
echo "Error: Debes introducir solo números."
exit 1
fi
Comprobación de Usuario (Añadido a Usuario)
Verifica si el usuario existe antes de mostrar el menú de opciones.
if id "$usuario" &>/dev/null; then
echo "El usuario '$usuario' es un usuario del sistema."
else
echo "Error: El usuario '$usuario' no existe en el sistema."
exit 1
fi
Suma de Números
Suma dos números introducidos por el usuario, validando que sean números.
read -p "Introduce el primer número: " num1
while ! [[ "$num1" =~ ^[0-9]+$ ]]; do
echo "Error: Debes introducir un número."
read -p "Introduce el primer número: " num1
done
read -p "Introduce el segundo número: " num2
while ! [[ "$num2" =~ ^[0-9]+$ ]]; do
echo "Error: Debes introducir un número."
read -p "Introduce el segundo número: " num2
done
echo "La suma es: $((num1 + num2))"
Positivo/Negativo, Par/Impar + Menú
Determina si un número es positivo o negativo, par o impar, y ofrece un menú de opciones.
read -p "Introduce un número: " num
while ! [[ "$num" =~ ^-?[0-9]+$ ]]; do
echo "Error: Ingresa un número válido."
read -p "Introduce un número: " num
done
# Menú de opciones
while true; do
echo -e "\n¿Qué quieres saber?"
echo "====================="
echo "1. ¿El número $num es POSITIVO o NEGATIVO?"
echo "2. ¿El número $num es PAR o IMPAR?"
echo "3. Realizar un descuento"
echo "4. Salir"
read -p "Elige una opción (1/2/3/4): " opcion
case $opcion in
1)
if (( num > 0 )); then
echo "El número $num es POSITIVO"
else
echo "El número $num es NEGATIVO"
fi ;;
2)
if (( num % 2 == 0 )); then
echo "El número $num es PAR"
else
echo "El número $num es IMPAR"
fi ;;
3)
read -p "¿Qué descuento quieres hacer? (10/20/50): " descuento
if [[ "$descuento" =~ ^(10|20|50)$ ]]; then
nuevo_precio=$(( num - (num * descuento / 100) ))
echo "Antes del descuento: $num"
echo "Después del descuento: $nuevo_precio"
else
echo "Error: Descuento no válido."
fi ;;
4)
exit 0 ;;
*)
echo "Opción no válida." ;;
esac
done
Par o Impar
Determina si un número es par o impar.
# Pedir un número y validar que sea un número válido
read -p "Introduce un número: " num
while ! [[ "$num" =~ ^-?[0-9]+$ ]]; do
echo "Error: Ingresa un número válido."
read -p "Introduce un número: " num
done
# Verificar si es par o impar
if (( num % 2 == 0 )); then
echo "El número $num es PAR."
else
echo "El número $num es IMPAR."
fi