# 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* ```bash #!/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!" ``` 2. **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* ```bash #!/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 ``` 3. **Script que muestra todos los usuarios del sistema** ```bash #!/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 ``` 4. **Script que muestra todos los grupos de usuarios del sistema. Utilizando el mismo fichero que hayas utilizado en el ejemplo anterior** ```bash #!/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 ``` 5. **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.** ```bash #!/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" ``` 6. **Escribir un script que al pasarle por argumento un parámetro, determine si es archivo, directorio, o si el parámetro no existe.(IF)** ```bash #!/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 " 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 ``` 7. **Escribir un script que al no pasarle argumentos, sugiera al usuario cuáles son las posibles opciones para su ejecución. (IF)** ```bash #!/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 " echo " $0 --borrar " 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 ``` 8. **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)** ```bash #!/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 " echo "Ejemplo de : 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." ``` 9. **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”.** ```bash #!/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 " 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 ```