5. Propuesta de ejercicios¶
A continuación se le propone la creación de una serie de scripts. Para ello, será necesario tanto usar los conocimientos expuestos en este documento, como otros relativos a la administración de Linux:
Los ficheros
/etc/profile
(leído en el arranque del sistema y común para todos los usuarios),~/.bashrc
,~/.bash_profile
(leídos al abrir una sesión con el usuario correspondiente, no es necesario que existan ambos), usados para cargar las variables de entorno, son en realidad shell-scripts. Analice el contenido de dichos scripts y modifíquelos convenientemente para definir los alias:alias red='ifconfig -a'
: para todos los usuarios del sistema.alias casa='echo $PWD'
: sólo para el usuario normal.alias sockets='netstat -l'
: sólo para el usuarioroot
.
Repita lo anterior pero utilizando funciones en vez de alias.
Cree los siguientes scripts:
variables.sh
: debe inicializar las variablesCONFIG='-a'
,ARP='-n'
yROUTE
.
funciones.sh
: debe definir las funcionesarranque_red()
(encargada de activar la tarjeta de red),parada_red()
(encargada de desactivar la tarjeta de red) yestado_red()
(encargada de ejecutar los comandos ifconfig, arp y route aplicándoles los parámetros pasados a la función en los argumentos 1, 2 y 3, respectivamente).
script1.sh
: debe importar las variables y funciones definidas por los dos scripts anteriores. Mostrará al usuario un menú en el que le pregunte si desea arrancar la red (invocando la funciónarranque_red()
), pararla (función parada_red()
) o mostrar su estado (funciónestado_red()
). Debe comprobar si alguna de las variablesCONFIG
,ARP
yROUTE
es nula y, en caso de serlo, permitirle al usuario escribir interactivamente (medianteread
) los parámetros con los que invocar el comando correspondiente.
script_copy.sh
: script que copie un fichero regular en otro, ambos pasados como argumentos. Si no se le pasan los argumentos, lo comprobará, y solicitará al usuario que los introduzca interactivamente.script_print.sh
: script que imprima en pantalla el contenido de un fichero de datos, o el contenido de todos los ficheros de un directorio, según se le pase como argumento un fichero regular o un directorio.script_borrar.sh
: script que borre con confirmación todos los ficheros pasados como argumentos.script_sesiones.sh
: script al que, pasándole el login de un usuario, devuelva cuántas sesiones tiene abiertas en el sistema.script_mostrar.sh
: script que para cada argumento que reciba (puede recibir una lista de argumentos) realice una de las siguientes operaciones:Si es un directorio, ha de listar los ficheros que contiene.
Si es un fichero regular, tiene que imprimir su contenido por pantalla.
En otro caso, debe indicar que no es ni un fichero regular ni un directorio (por ejemplo, un fichero de bloques o de caracteres del directorio
/dev
).
script_ejecucion.sh
: script que asigne el permiso de ejecución a los ficheros regulares o directorios pasados como argumento (puede admitir una lista de ficheros).script_doble.sh
: script que pida un número por teclado y calcule su doble. Comprobará que el número introducido es válido y, antes de terminar, preguntará si deseamos calcular otro doble, en cuyo caso no terminará.script_tipos.sh
: script que devuelva el número de ficheros de cada tipo (ficheros regulares o directorios) que hay en un determinado directorio, así como sus nombres. Tendrá un único argumento (opcional) que será el directorio a explorar. Si se omite dicho argumento, se asumirá el directorio actual. Devolverá0
(éxito) si se ha invocado de forma correcta o1
(error) en caso contrario.script_user.sh
: script que reciba como argumento el identificador de un usuario e imprima por pantalla la siguiente información: identificador, nombre completo del usuario, directoriohome
, shell que utiliza, número de sesiones actualmente abiertas y procesos pertenecientes a dicho usuario. El script debe permitir las siguientes opciones:-p
: sólo muestra la información de los procesos.-u
: muestra toda la información excepto la referente a los procesos.--help
: muestra información de ayuda (uso del script).
El script debe comprobar si los argumentos pasados son correctos, así como la existencia del usuario indicado. Como código de error podrá devolver
0
(éxito),1
(sintaxis de invocación errónea),2
(usuario no existe).script_menu.sh
: script que ofrezca al usuario un menú (con una opción para salir) desde el que el usuario pueda seleccionar cual de los scripts anteriores (apartados «b» a «k») quiere utilizar.script_puerto.sh
: script que reciba como argumento un número de puerto TCP (PUERTO
) y comprobará si el valor es un número entero positivo en el rango[1, 1023]
, de modo que:Si es así: el script analizará si los puertos TCP
PUERTO
yPUERTO+1
del equipo local se encuentran a la escucha. Tras ello, imprimirá un mensaje indicando el estado obtenido. Para ello, puede analizar la salida del comando netstat.En otro caso: imprimirá por pantalla un mensaje indicando que el valor indicado no es un puerto de sistema.
script_arp.sh
: script que reciba como argumento un número entero, guardándolo en la variablePOS_ARP
. El script comprobará si el valor de la variablePOS_ARP
es un número entero positivo, de modo que:Si es así: el script calculará el número de entradas que actualmente tiene la caché ARP del equipo, guardándolo en la variable
NENTRADAS
. Si el valor dePOS_ARP
es mayor queNENTRADAS
, imprimirá por pantalla un mensaje tal como: «Ninguna entrada en la posición POS_ARP». En caso de quePOS_ARP
sea menor o igual queNENTRADAS
, imprimirá por pantalla un mensaje con la posición de la entrada ARPPOS_ARP
, seguido del contenido de dicha entrada ARP.En otro caso: imprimirá por pantalla un mensaje indicando que el valor indicado no es un número entero: «Posición de entrada ARP no válida».
Se solicitan dos posibles soluciones:
script_arp1.sh
: usandoread
y estructuras de control.script_arp2.sh
: analizando la salida del comando arp mediante comandos de análisis de texto.
script_param.sh
: Considere que en el shell actual se dispone de la variable:VAR="nombre=v1&edad=v2&tlf=v3"
Escriba un shell-script que analice el valor de dicha variable y para cada uno de los parámetros extraiga su valor y lo imprima por pantalla. Por ejemplo, que la salida sea:
Cadena: nombre=v1&edad=v2&tlf=v3 nombre: v1, edad: v2, tlf: v3.
Se solicitan dos posibles soluciones:
script_param1.sh
: usando la variable de entornoIFS
.script_param2.sh
: sin usarIFS
.