Ejercicios Tema 4 - Primera Parte

  1. Script que lea en contenido del directorio /etc y lo guarde en el fichero /root/contenido_etc El script se ejecuta con sudo

#!/bin/bash
# Script que guarda el listado de /etc en /root/contenido_etc

echo "Obteniendo el listado de /etc..."

# Usamos ls -l para un listado detallado
# Redirigimos la salida (>) al archivo especificado
ls -l /etc > /root/contenido_etc
echo "Completado!"
  1. Script que muestre por pantalla el contenido del fichero /etc/passwd y /etc/shadow. Modifica después este script para que almacene ambos ficheros en /home/usuarios. Hay que ejecutar con sudo

#!/bin/bash
# --- Modificación: Almacenar ficheros en /home/usuarios ---
echo "Debes ejecutar con sudo"

act_dir = pwd
# Creamos el directorio por si no existe
# -p evita errores si el directorio ya existe
mkdir -p "$DEST_DIR"

echo "Copiando ficheros a $DEST_DIR..."

cat /etc/passwd | cut -d : -f 1 | sort > ~/usuarios.txt
cat uno.txt >> ~/usuarios.txt

cat /etc/shadow >> ~/usuarios.txt

echo ""
echo "Listado del directorio destino:"
ls -l $act_dir
  1. Script que muestra todos los usuarios del sistema

#!/bin/bash
# Script que muestra todos los usuarios del sistema

echo "--- Usuarios del Sistema ---"

# cut -d: -> Define el delimitador como ':'
# cut -f1 -> Extrae solo la primera columna
cut -d: -f4 /etc/group
  1. Script que muestra todos los grupos de usuarios del sistema. Utilizando el mismo fichero que hayas utilizado en el ejemplo anterior

#!/bin/bash
# Script que muestra todos los grupos de usuarios del sistema

echo "--- Grupos del Sistema ---"

# Usamos /etc/group, que es el fichero que define los grupos
cut -d: -f1 /etc/group
  1. Script que le pida al usuario dos números; y posteriormente le pida la operación a realizar. En primer lugar debe comprobar que el primer parámetro sea mayor que el segundo, y mostrar al usuario un mensaje informando de esta situación. Posteriormente mostrará un mensaje que avisará de que se va a realizar la operación, enseñando el resultado.

#!/bin/bash
# Script de calculadora simple con comprobación

echo "Introduce el primer número (num1):"
read num1
echo "Introduce el segundo número (num2):"
read num2
echo "Introduce la operación (+, -, *, /):"
read op

# 1. Comprobar si num1 > num2
# Usamos -gt (greater than) para comparaciones numéricas
if [ "$num1" -gt "$num2" ]; then
    echo "El primer número ($num1) es mayor que el segundo ($num2)."
else
    echo "El primer número ($num1) NO es mayor que el segundo ($num2)."
fi

# 2. Realizar la operación
echo "Aviso: Se va a realizar la operación..."

# Usamos 'case' para manejar las operaciones de forma segura
case "$op" in
  "+")
    resultado=$(($num1 + $num2))
    ;;
  "-")
    resultado=$(($num1 - $num2))
    ;;
  # El usuario puede escribir * o \*
  "\*" | "*") 
    resultado=$(($num1 * $num2))
    ;;
  "/")
    if [ "$num2" -eq 0 ]; then
        echo "Error: ¡División por cero no permitida!"
        exit 1
    fi
    resultado=$(($num1 / $num2))
    ;;
  *)
    echo "Error: Operación '$op' no reconocida."
    exit 1
    ;;
esac

echo "Resultado: $num1 $op $num2 = $resultado"
  1. Escribir un script que al pasarle por argumento un parámetro, determine si es archivo, directorio, o si el parámetro no existe.(IF)

#!/bin/bash
# Determina si el argumento 1 es un fichero, directorio o no existe
# Comprobamos que se ha pasado exactamente 1 argumento
if [ $# -ne 1 ]; then
    echo "Error: Debes pasar exactamente un argumento."
    echo "Uso: $0 <ruta_a_comprobar>"
    exit 1
fi

RUTA=$1

if [ -f "$RUTA" ]; then
    echo "El parámetro '$RUTA' es un ARCHIVO."
elif [ -d "$RUTA" ]; then
    echo "El parámetro '$RUTA' es un DIRECTORIO."
else
    echo "El parámetro '$RUTA' NO EXISTE o es de otro tipo."
fi
  1. Escribir un script que al no pasarle argumentos, sugiera al usuario cuáles son las posibles opciones para su ejecución. (IF)

#!/bin/bash
# Si no se pasan argumentos, sugiere opciones al usuario.

# Comprobamos si el número de argumentos ($#) es igual a 0
if [ $# -eq 0 ]; then
    echo "Error: No se proporcionaron argumentos."
    echo ""
    echo "Este script sirve para gestionar usuarios."
    echo "Opciones posibles:"
    echo "  $0 --crear  <nombre_usuario>"
    echo "  $0 --borrar <nombre_usuario>"
    echo "  $0 --listar"
    exit 1
fi

case $1 in 

--crear | -c) 
echo "Creando usuario"
useradd $2
echo "Creado el nuevo usuario ($2)"
;;

--borrar | -b) 
echo "Borrando usuario"
userdel $2
echo "Usuario ($2) borrado"
;;


--listar | -c) 
echo "Aqui tienes la lista de usuarios"
cat /etc/passwd | grep -o "^[^:]*"

;;

*) 
echo "Parametro incorrecto, saliendo"
exit 
  1. Script que devuelva una lista de texto de los tipos de archivo existentes en un directorio pasado como primer parámetro y un tipo de archivo como segundo parámetro. Comprueba tanto el número de argumentos como la existencia o no de los parámetros. (IF)

#!/bin/bash
# Lista archivos de un tipo específico en un directorio dado.

# 1. Comprobar el número de argumentos
if [ $# -ne 2 ]; then
    echo "Error: Se requieren exactamente dos argumentos."
    echo "Uso: $0 <directorio> <tipo>"
    echo "Ejemplo de <tipo>: f (fichero), d (directorio), l (enlace simbólico)"
    exit 1
fi

DIRECTORIO=$1
TIPO=$2

# 2. Comprobar la existencia del directorio
if [ ! -d "$DIRECTORIO" ]; then
    echo "Error: El directorio '$DIRECTORIO' no existe."
    exit 1
fi

# 3. Comprobar que el tipo es uno de los comunes (f, d, l)
if [ "$TIPO" != "f" ] && [ "$TIPO" != "d" ] && [ "$TIPO" != "l" ]; then
     echo "Aviso: Tipo '$TIPO' no es f, d, o l, pero se intentará."
fi

echo "Buscando archivos de tipo '$TIPO' en el directorio '$DIRECTORIO'..."
echo "(Búsqueda solo en el primer nivel de profundidad)"

# Usamos 'find' para la búsqueda
# -maxdepth 1 -> para que solo busque en ese directorio, no en subdirectorios
# -type $TIPO -> filtra por el tipo de archivo
find "$DIRECTORIO" -maxdepth 1 -type "$TIPO"

echo "Búsqueda finalizada."
  1. Script que al pasarle como argumento un archivo de texto, ordene las líneas de texto ascendentemente al pasarle una “A” como segundo parámetro o descendentemente al pasarle una“Z”.

#!/bin/bash
# Ordena las líneas de un archivo de texto.

# 1. Comprobar número de argumentos
if [ $# -ne 2 ]; then
    echo "Error: Se requieren dos argumentos."
    echo "Uso: $0 <archivo_texto> <A|Z>"
    echo "  A: Orden ascendente (A-Z)"
    echo "  Z: Orden descendente (Z-A)"
    exit 1
fi

ARCHIVO=$1
MODO=$2

# 2. Comprobar que el archivo existe y es legible
if [ ! -f "$ARCHIVO" ] || [ ! -r "$ARCHIVO" ]; then
    echo "Error: El archivo '$ARCHIVO' no existe o no se puede leer."
    exit 1
fi

# 3. Comprobar el modo (A o Z) y ejecutar
if [ "$MODO" == "A" ]; then
    echo "--- Ordenando '$ARCHIVO' ascendentemente (A-Z) ---"
    sort "$ARCHIVO"
elif [ "$MODO" == "Z" ]; then
    echo "--- Ordenando '$ARCHIVO' descendentemente (Z-A) ---"
    sort -r "$ARCHIVO" # -r para 'reverse'
else
    echo "Error: El segundo parámetro debe ser 'A' o 'Z'."
    exit 1
fi