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