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]%