Centro de Informática / Sistemas Operativos II./ Ing. Víctor González Barbone.

Examen Diciembre 1998

Solución de scripts.

1. Construir un script para crear usuarios. Deberá leer un archivo nuevos.txt con los campos nombre login, uid, grupo, comentario, directorio propio, separados por ":". Se dispone del comando de sistema useradd, con sintaxis
  useradd [-u uid] [-g grupo] [-c comentario] [-d dir_propio] nombre_login
Ejemplo de archivo nuevos.txt:
  nombre1:2001:prueba:Usuario_1:/home/prueba/nombre1
  nombre2:2002:prueba:Usuario_2:/home/prueba/nombre2
  nombre3:2003:prueba:Usuario_3:/home/prueba/nombre3
 
#!/bin/sh
#
# nuevos.cmd: crea nuevos usuarios desde un archivo de texto.
#
 
LISLINEA=`cat nuevos.txt`
 
for LINEA in $LISLINEA
do
  NOMBRE=`echo $LINEA | cut -f1 -d:`
  NUMERO=`echo $LINEA | cut -f2 -d:`
  GRUPO=`echo $LINEA | cut -f3 -d:`
  COMENT=`echo $LINEA | cut -f4 -d:`
  PROPIO=`echo $LINEA | cut -f5 -d:`
  echo useradd -u $NUMERO -g $GRUPO -c $COMENT -d $PROPIO $NOMBRE
done
 
2. a) Escribir un script para mostrar los nombres de login de usuarios y sus directorios propios para aquellos usuarios con grupo primario GID 201.
b) Escribir un script que reciba como parámetro un nombre de login de usario, extraiga su directorio propio y verifique si tiene allí un subdirectorio de nombre ".netscape". De no ser así, copiará hacia el directorio propio del usuario el directorio modelo /etc/skel/docentes/netscape y todos sus archivos.
c) reunir ambos scripts en uno solo que agregue la configuración personal modelo ".netscape" a todos los usuarios que aún no lo tengan.
 
#!/bin/sh
#
# netscape.cmd: coloca subdirectorio nestcape en directorios propios
# de usuarios del grupo 201 que aún no lo tengan
 
USU201=`cat /etc/passwd | tr " " "_" | \
  grep "[a-zA-Z0-9-_]*:[^:]*:[0-9]*:201:"`
 
for LINEA in $USU201
do
  NOMBRE=`echo $LINEA | cut -f1 -d:`
  PROPIO=`echo $LINEA | cut -f6 -d:`
  if [ -d $PROPIO/.netscape ]
  then
    echo El usuario $NOMBRE tiene directorio .netscape
  else
    echo El usuario $NOMBRE NO TIENE directorio .netscape
    cp -pr /etc/skel/netscape $PROPIO/.netscape
    chown -R $NOMBRE $PROPIO/.netscape
    chgrp -R 201 $PROPIO/.netscape
  fi
done
 
3. a) Construir un script conec.cmd para establecer conexión discada a una red de datos. Se dispone de los siguientes scripts:
  urugnet.dip para conectar a UruguayNet;
  urupac.dip para conectar a URUPAC;
  iie.dip para acceder al Instituto de Ingeniería Eléctrica;
  adinet.dip para conectar a Adinet.
Estos scripts se invocan con el comando dip; por ejemplo:
  dip urugnet.dip
El script recibirá uno de los nombres (urugnet, urupac, iie, adinet) e invocara el script correspondiente al discado. Por ejemplo,
  conec urupac
invocará el script de conexión a URUPAC.
b) Agregar al script un control de éxito, mostrando un mensaje "Conexión establecida" o "No se pudo establecer conexión". Cuando se ha establecido un enlace PPP, el comando /sbin/ifconfig da una salida de varias líneas, una de las cuales contiene la cadena "ppp0". El establecimiento de la conexión debe esperarse 40 segundos.
 
#!/bin/bash
# conec: disca proveedor para enlace PPP por dip
# ajustar los parámetros siguientes según se requiera
 
ESPERA=40 # tiempo de espera por conexión
 
# elección de proveedor a conectar
case $1 in
urupac)
  echo Conectando a URUPAC...
  dip urupac.dip;;
adinet)
  echo Conectando a Adinet...
  dip adinet.dip;;
iie)
  echo Conectando a IIE...
  dip iie.dip;;
urugnet)
  echo Conectando a UruguayNet...
  dip urugnet.dip;;
*)
  echo dipconec: uso:
  echo " dipconec urupac|adinet|iie|urugnet"
  exit 1;;
esac
 
# espera por conexión
sleep $ESPERA
 
# detecta conexión por presencia de interfaz ppp0
CONEC=`/sbin/ifconfig | grep ppp0`
if [ ! -z "$CONEC" ]
then
  echo -e "\007"
  echo Conexión establecida.
  exit 0
else
  echo No se pudo establecer conexión.
  exit 2
fi