Centro de Informática. Sistemas Operativos II. Curso 1999.
-
Prueba parcial 2/2.
Solución de Scripts
Con libre consulta de material.
Estructura de archivos.
Estructura del archivo /etc/passwd:
#nombre:contraseña:UID:GID:comentarios:dir_propio:shell
jperez:Xdio0IKLLP:1130:103:Juan Pérez:/home/jperez:/bin/bash
Estructura del archivo /etc/group:
#grupo:GID:lista_usuarios
docentes:103:victor,german,fernando
Estructura del archivo /etc/hosts:
#número_IP nombre_máquina alias
10.137.137.250 liebre.cdi.edu.uy liebre localhost
mailhost
Todos los archivos anteriores pueden tener comentarios (líneas comenzadas
por #).
En los sistemas con NIS, para passwd y group usar el
comanto ypcat en lugar de cat para listar estos archivos, o el
comando ypmatch para extraer una línea sola de alguno de
ellos. Ejemplos:
ypcat passwd
ypcat group
ypmatch jperez passwd
1. Escribir un script admaq para agregar
una máquina al archivo /etc/hosts. Solicitará al
usuario un número IP y luego un nombre de máquina. El ingreso
del nombre de máquina se reiterará hasta que el usuario ingrese
un nombre de máquina vacío (tecla Enter sin escribir nada).
El script armará la línea en el formato del archivo hosts
y la presentará al usuario pidiendo confirmación. Si la obtiene,
adjuntará la línea al final del archivo /etc/hosts.
#!/bin/bash
#
# admaq: agrega máquina al archivo /etc/hosts
#
echo
echo "AGREGAR MAQUINA."
echo -n "Nombre de máquina: "
read NVAMAQ
while [ $NVAMAQ ]
do
echo -n "Numero IP: "
read NROIP
LINEA="$NROIP $NVAMAQ"
echo Se agregará la siguiente línea:
echo $LINEA
echo -n "Está de acuerdo?(sN): "
read RESP
if [ $RESP = "s" -o $RESP = "S" ]
then
echo -n Agregando nueva máquina...
echo $LINEA >> hosts
echo hecho.
else
echo No se agregó esta máquina.
fi
clear
echo AGREGAR MAQUINA.
echo -n "Nombre de máquina: "
read NVAMAQ
done
2. Escribir un script sumadora para hacer
sumas y restas de enteros. Presentará al usuario una interfaz similar
a ésta:
SUMADORA: suma y resta enteros.
Los símbolos aceptados son: + y -
Debe haber espacio entre todos los operandos y operadores.
Ejemplo: 5 + 3 - 20 + 35
Ingrese operaciones:
3 * 2 + 10
Resultado:
16
Si la expresión ingresada es correcta, el script realizará
el cálculo y presentará el resultado; si no lo es, emitirá
en lugar del resultado el mensaje "Expresión incorrecta. Debe comenzar
de nuevo" y saldrá.
¿Qué dificultas se presentaría al incluír otras
operaciones?
Sugerencia: para controlar la validez de la expresión, capturar
el valor de retorno del comando que realiza la operación.
#!/bin/bash
#
# sumadora: interfaz para suma y resta
#
clear
echo
echo "SUMADORA: suma y resta enteros."
echo "Los símbolos aceptados son + y -"
echo "Debe dejar espacio entre operandos y operadores."
echo "Ejemplo: 5 + 3 - 20 + 13"
echo "Ingrese operaciones:"
read CALCULO
echo Resultado:
RESULTADO=`expr $CALCULO 2>/dev/null`
if [ $? != "0" ]
then
echo "Expresión incorrecta. Debe comenzar de
nuevo."
else
echo $RESULTADO
fi
3. Un administrador de una máquina UNIX debe
revisar día a día si hay conexión hacia todas las
máquinas contenidas en el archivo /etc/hosts. Para ello
dispone del comando
ping -c1 <nombre de la máquina destino>
Como ejemplo, el comando
ping -c1 nutria
envía y recibe un paquete hacia la máquina nutria.
El valor de retorno del comando ping es el siguiente:
0 La máquina destino está viva, contesta
normalmente.
1 La máquina destino no contesta.
2 Hubo algún error.
Construir un script vivas que pruebe conectividad a todas las
máquinas contenidas en el archivo /etc/hosts, y muestre
el nombre de las máquinas indicando su estado, así:
RESPUESTA de máquinas en /etc/hosts:
nutria: está viva.
gaviota: no contesta.
coati: error en ping
Sugerencias. Recordar que el archivo /etc/hosts puede tener comentarios.
Redireccionar salida y error de ping para no confundir la salida
del script.
#!/bin/bash
#
# vivas: verifica si las máquinas están vivas
#
clear
echo
echo "RESPUESTA de máquinas en /etc/hosts:"
LISTA=`cat hosts | grep -v "#" | cut -f2 `
for MAQ in $LISTA
do
ping -c1 $MAQ >>/dev/null 2>&1
case $? in
0)
echo $MAQ: está viva;;
1)
echo $MAQ: no contesta;;
2)
echo $MAQ: error en ping;;
esac
done
4. El comando df muestra el espacio disponible
en los sistemas de archivos montados. Su salida tiene esta forma:
Filesystem 1024-blocks Used Available
Capacity Mounted on
/dev/hda2 1484386 433463
974213 31% /
/dev/hda1 1228736 524576
704160 31% /dosc
/dev/hda3 68263
63484 4779
93% /tmp
Los campos están separados por espacios. El campo Capacity indica
el porcentaje ocupado. Escribir un script espacio que invoque
el comando df y muestre en su salida el nombre del sistema de
archivo y su capacidad ocupada para los sistemas de archivos con 90% o
más espacio ocupado.
#!/bin/bash
# espacio: muestra sistemas de archivo con 90% o más de
ocupación.
df | tr -s " " | cut -f1,5 -d" " | grep 9[0-9]%