EJERCICIOS
1. Escribe un script que cree 5 archivos con los nombres fichero1.txt, fichero2.txt, ...,
fichero5.txt en el directorio actual.
Realiza 2 versiones: crearArchivo.sh y crearArchivoConArgumentos.sh.
La segunda versión debe recibir los archivos desde línea de comandos.
2. Usando redirecciones de E/S añade el siguiente contenido a los ficheros creados
en el ejercicio anterior: ¡Este es el fichero$i!
3. Añade sin borrar el contenido de los ficheros la siguiente información: Esto es
contenido extra para el fichero$i.
4. Supón que tienes tres archivos de texto archivo1.txt, archivo2.txt, y archivo3.txt.
Escribe un script que imprima cuántas líneas tiene cada archivo.
EJERCICIOS PARTE 2
1. Hacer un shell-script NumeroUsuarios que indique a la salida el número de usuarios
que tiene el sistema. Utilizar para ello el comando getent passwd que vuelca a la salida
estándar la base de datos de usuarios del sistema en formato CSV. El mensaje de salida
debe ser exactamente el siguiente:
El sistema tiene ?????? usuarios.
2. Hacer un shell-script ListaUsuarios que, usando el comando getent passwd, vuelque a
la salida los usuarios del sistema, ordenados por su UID (identificador de usuario).
3. Hacer un shell-script MaxUID que, usando el comando getent passwd, vuelque a la
salida el máximo UID del sistema.
4. Hacer un shell-script UsuariosConShell que, usando el comando getent passwd,
vuelque a la salida la lista de usuarios que tienen el shell indicado. La sintaxis sería:
UsuariosConShell <shell>
El mensaje de salida debe ser exactamente el siguiente:
La lista de usuarios con el shell ???? es:
<usuario1>
<usuario2>
…..
<usuarioN>
5. Hacer un shell-script InfoUsuario que, usando el comando getent passwd, vuelque a la
salida la información de dicho usuario. La sintaxis sería:
InfoUsuario <usuario>
El mensaje de salida debe ser exactamente el siguiente:
Información del usuario <usuario>:
UID: ?????
GID: ?????
Directorio personal: ?????
Intérprete de comandos: ??????
6. Hacer un shell-script InfoUsuarios que, vuelque a la salida la misma información del
ejercicio anterior, pero para varios usuarios. La sintaxis sería:
InfoUsuarios <usuario1> <usuario2> …. <usuarioN>
7. Hacer un shell-script ProcesosUsuario que, usando el comando ps uaxw, vuelque a la
salida solo los procesos del usuario indicado por parámetro. La sintaxis sería:
ProcesosUsuario <usuario>
8. Hacer un shell-script ExisteUsuario que, usando el comando getent passwd, indique si
un usuario pertenece o no al sistema. La sintaxis sería:
ExisteUsuario <usuario>
Los mensajes deberán ser exactamente así:
“El usuario <usuario> no pertenece al sistema” o bien
“El usuario <usuario> pertenece al sistema” sustituyendo <usuario> por el nombre de
usuario
9. Mejorar el shell-script realizado en el ejercicio 5 de forma que, usando el shell-script
realizado en el ejercicio 8, compruebe al principio de su ejecución si existe o no el usuario
indicado por parámetro. En caso de que no exista deberá visualizar un mensaje de error
indicándolo.
NOTA IMPORTANTE: En todos los ejercicios deberá comprobarse que el número de
parámetros es correcto. En caso contrario deberá indicarse el error y notificar al usuario
con un mensaje en pantalla con el uso del shell-script. Por ejemplo:
“El número de parámetros es incorrecto”
“USO: <nombre_shell-script> <argumentos>”
sustituyendo <nombre_shell-script> por el nombre del shell-script en cada caso y
<argumentos> por la lista de argumentos que espere con un nombre autoexplicativo del
argumento y encerrado entre < > si es obligatorio o entre [ ] si es opcional.
EJERCICIOS PARTE 3
Hacer un shell-script CambiaPermisos que cambie recursivamente los permisos de
todas las entradas a partir de una ruta a un directorio indicado por parámetro. La sintaxis
sería:
CambiaPermisos <ruta_directorio>
Cada una de las entradas deberá tratarse de la siguiente forma: si la entrada es un
directorio deberá asignársele los permisos rwxr-xr-x (chmod 755); si la entrada es un
fichero deberá comprobarse si se trata de un fichero ejecutable o no. En caso de ser un
fichero ejecutable deberá asignársele los permisos rwxr-xr-x (chmod 755), en otro caso
deberá asignársele los permisos rw-r--r-- (chmod 644).
NOTA IMPORTANTE: El ejercicio deberá resolverse utilizando el recorrido de directorios
mediante la sentencia for y no se podrá utilizar ningún comando u opción extra que
resuelva el ejercicio de forma automática.
2. Hacer un shell-script BuscaFichero que busque recursivamente los directorios en los
que aparece un fichero a partir de un directorio dado. Tanto el nombre del fichero como el
directorio de partida se indican por parámetro. La sintaxis de la órden sería:
BuscaFichero <nombre_fichero> <ruta_directorio_inicial_busqueda>
El mensaje de salida debe ser exactamente el siguiente:
El fichero ???? se ha encontrado en los directorios:
????????
????????
????????
NOTA IMPORTANTE: El ejercicio deberá resolverse utilizando el recorrido de directorios
mediante la sentencia for y no se podrá utilizar ningún comando u opción extra que
resuelva el ejercicio de forma automática. Para poder resolver el ejercicio se recomienda
utilizar, entre otros, el comando basename.
3. En la primera línea del fichero ventas.csv podrás ver el significado de cada campo.
Implementa un Shell-script llamado VentasFruta que, dada una fruta como argumento,
muestre a la salida los días, EN ORDEN CRECIENTE, que se vendió dicha fruta junto con la
cantidad vendida dicho día. La ruta al fichero CSV también se pasará como parámetro (no
puede ponerse directamente ventas.csv en el código del Shell-script, tiene que funcionar
con cualquier fichero CSV que se indique). La sintaxis de ejecución de este Shell-script es:
VentasFruta <fichero_CSV> <fruta>
La salida del Shell-script deberá ser exactamente como la siguiente:
La fruta ¿??? se vendió los siguientes días:
El día ¿???? se vendieron ¿???? Kg.
El día ¿???? Se vendieron ¿???? Kg.
NOTA IMPORTANTE: El ejercicio deberá resolverse utilizando la sentencia while
combinado con la sentencia read.