Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Ejercicios de Scripts Deooñ

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 19

Diseño de aplicaciones informáticas.

Sistemas operativos multiusuario y en red.

Actividades

Actividades ............................................................................................................................... 1
Procedimientos o scripts en Linux ......................................................................................... 2
Actividad 1. Pruebas sencillas con procedimientos ......................................................... 3
Actividad 2. Creación de scripts ...................................................................................... 9
Actividad 3. Creación de scripts .................................................................................... 10
Actividad 4. Creación de scripts .................................................................................... 11
Actividad 5. Creación de scripts .................................................................................... 12
Actividad 6. Creación de scripts .................................................................................... 13
Actividad 7. Creación de scripts .................................................................................... 15
Actividad 8. Creación de scripts .................................................................................... 17
Actividad 9. Creación de scripts .................................................................................... 18
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

Procedimientos o scripts en Linux


Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

Actividad 1. Pruebas sencillas con procedimientos


1. Crea un archivo con el editor vi llamado prueba_listado e introduce las siguientes ordenes.
Ejecútalo y observa los resultados.
date
ls
2. Introduce en el archivo prueba_mensaje el siguiente código y ejecútalo:
MENSAJE="Buenos días"
echo $MENSAJE
3. Introduce en el archivo prueba_if el siguiente código y ejecútalo:
if true
then
echo Hola
echo Que tal estas
else
echo Falso
fi
4. Introduce en el archivo prueba_test el siguiente código y ejecútalo teniendo en cuenta que
las opciones indican:
• -f indica si existe el fichero
• -r indica si existe el fichero y es legible
• -w indica si existe el fichero y es modificable
• -x indica si existe el fichero y es ejecutable
• -d indica si existe el directorio
if [ -f /home/user1/prueba02 ]
then
echo Fichero
fi

if [ -d /home/user1/prueba02 ]
then
echo Directorio
fi

if [ -r /home/user1/prueba02 ]
then
echo Legible
fi

if [ -w /home/user1/prueba02 ]
then
echo Modificable
fi

if [ -x /home/user1/prueba02 ]
then
echo Ejecutable
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

fi
5. El siguiente script indica el número de argumentos recibidos y los enumera. Luego muestra
los tres primeros. Introduce en el archivo prueba_entorno el código y ejecútalo, teniendo en
cuenta que:
• $# indica el número de argumentos recibidos por el script
• $* es la lista de todos los argumentos
• $1, $2, … representan cada uno de los argumentos recibidos
echo El número de variables es $#

echo Las variables son:


for VAR in $*
do
echo $VAR
done

echo La primera variable es $1


echo La primera variable es $2
echo La primera variable es $3
6. Modifica el fichero prueba_test. Haz que realice las comprobaciones sobre el argumento
recibido en lugar de hacerlas sobre el fichero prueba02.
7. El siguiente script crea un directorio con el nombre que recibe como primer argumento
dentro del directorio recibido como segundo argumento. Introduce en el archivo
prueba_crear el código y ejecútalo, teniendo en cuenta que:
• $? devuelve un código que indica si el último comando se ha ejecutado con éxito (0) o ha
habido algún error (<>0)
• -eq compara que dos números son iguales
• -ne compara que dos números son diferentes
• -lt compara que el primer número es menor que el segundo
• -gt compara que el primer número es mayor que el segundo
• -le compara que el primer número es menor o igual que el segundo
• = compara que dos cadenas de texto son iguales
• != compara que dos cadenas de texto son diferentes
• exit provoca la finalización de la ejecución del script. Si va acompañado de un argumento,
esté es el valor devuelto por el script
if [ $# -eq 2 ]
then
cd $2
ERR=$?
if [ $ERR -ne 0 ]
then
echo El directorio padre no existe
exit
fi

mkdir $1
ERR=$?
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

if [ $ERR -ne 0 ]
then
echo No se ha podido crear el directorio
exit
fi

else
echo Número de argumentos erróneo
fi
8. El siguiente script comprueba si los dos únicos usuarios conectados al ordenador son los
usuarios root y usuario1. Introduce en el archivo prueba_usuarios el código y ejecútalo,
teniendo en cuenta que:
• ´xxx´ Las comillas invertidas provocan que se ejecuta el comando encerrado
• -a es la operación lógica ógica y (and)
• -o es la operación lógica ógica o (or)
• expr hace que se ejecuta una expresión aritmética
USUARIOS=`users`

CUENTA=0
for USUARIO in $USUARIOS
do
CUENTA=`expr $CUENTA + 1`
if [ $CUENTA -eq 1 ]; then USUARIO1=$USUARIO; fi
if [ $CUENTA -eq 2 ]; then USUARIO2=$USUARIO; fi
done

if [ $CUENTA -eq 2 ]
then
if [ $USUARIO1=root -a $USUARIO2=usuario1 -o \
$USUARIO1=usuario1 -a $USUARIO2=root ]
then
echo Los únicos usuarios son root y usuario1
fi
else
echo Hay menos o más de dos usuarios
fi
9. El siguiente script comprueba que el archivo pasado como argumento existe en el directorio
actual. Introduce en el archivo prueba_comprobar el código y ejecutalo, teniendo en cuenta
que:
• ! niega un valor
if [ ! $# -eq 1 ]
then
echo Número de argumentos erroneo
exit 1
fi

for FICHERO in `ls`


do
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

echo Comparando $FICHERO y $1


if [ $FICHERO = $1 ]
then
echo El fichero $1 existe
exit 0
fi
done

echo El fichero $1 no existe


exit 1
El siguiente script crea diez archivos. Introduce en el archivo prueba_while
el código y ejecutalo:
mkdir PruebaWHILE
cd PruebaWHILE

VAL=1
while [ $VAL -lt 11 ]
do
touch fich$VAL
VAL=`expr $VAL + 1`
done
10. El siguiente script muestra en pantalla el número de argumentos recibidos. Introduce en el
archivo prueba_case el código y ejecutalo:
case $# in
1 )
echo El número de argumentos recibidos es uno.
;;
2 )
echo El número de argumentos recibidos es dos.
;;
3 )
echo El número de argumentos recibidos es tres.
;;
Esac
11. El siguiente script traduce comando en español a ingles. Introduce en el archivo
prueba_case2 el código y ejecutalo:
case $# in
1 )
case $1 in
listado )
ls
;;
directorioactual )
pwd
;;
esac
;;
2 )
case $1 in
listado )
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

ls $2
;;
abrir )
cd $2
;;
visualizar )
cat $2
;;
esac
;;
3 )
case $1 in
copiar )
cp $2 $3
;;
mover )
mv $2 $3
;;
esac
;;
esac
12. El comando printf se utiliza en los scripts para imprimir (es una especie de versión
avanzada de echo). El primer parámetro es la cadena formateada a imprimir, y los
restantes parámetros son valores a introducir en los huecos de la cadena formateada.
Introduce en el archivo prueba_printf el código y ejecútalo, teniendo en cuenta que:
• \n indica un salto de línea
• %i es un argumento de tipo entero
• %s es un argumento de tipo texto
printf “Cadena sin argumentos\n”
printf “Este ciclo tiene %i cursos\n”, 2
printf “El usuario actual es %s\n“, $LOGNAME
13. El siguiente código es el contenido del archivo /etc/profile, que se ejecuta cada vez que un
usuario inicia una sesión. Estúdialo:
# /etc/profile

# System wide environment and startup programs


# Functions and aliases go in /etc/bashrc

PATH="$PATH:/usr/X11R6/bin"

ulimit -S -c 1000000 > /dev/null 2>&1


if [ `id -gn` = `id -un` -a `id -u` -gt 14 ]; then
umask 002
else
umask 022
fi

USER=`id -un`
LOGNAME=$USER
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

MAIL="/var/spool/mail/$USER"

HOSTNAME=`/bin/hostname`
HISTSIZE=1000

if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then


INPUTRC=/etc/inputrc
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

for i in /etc/profile.d/*.sh ; do
if [ -x $i ]; then
. $i
fi
done

unset i
14. EL archivo $HOME/.profile se ejecuta cuando el usuario correspondiente inicia una sesión,
es decir, es el conjunto de operaciones que ejecutan cuando el usuario inicia una sesión,
sería el perfil. Estudia el script.
# .bash_profile

# Get the aliases and functions


if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin
BASH_ENV=$HOME/.bashrc
USERNAME=""

export USERNAME BASH_ENV PATH


Añade al final la siguiente línea, cierra e inicia la sesión, y observa lo que ocurre:
echo Bienvenido $LOGNAME
15. EL archivo $HOME/.logout se ejecuta cuando el usuario correspondiente cierra la sesión.
Estúdialo:
# ~/.bash_logout

clear
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

Actividad 2. Creación de scripts


1. Crea un script en un fichero llamado archivos para producir la siguiente salida:
• Ir al directorio personal del usuario ESI05.
• Crear un archivo llamado resultado que contenga estas líneas:
• El texto “El contenido del directorio personal del usuario ESI05 a fecha”.
• Fecha con el formato mm-dd-aaaa (mes-día-año).
• El texto “ordenados por tamaño de archivo son”.
• La descripción larga de los ficheros ordenados por tamaño ascendente.
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

Actividad 3. Creación de scripts


1. Crea un script en un fichero llamado procesos para producir la siguiente salida:
• El texto “Los procesos activos en el instante”.
• Hora actual, sin la fecha.
• El texto “del día”.
• Fecha actual, sin la hora.
• El texto “son los siguientes:”
• Información de todos los procesos actualmente arrancados.
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

Actividad 4. Creación de scripts


1. Crea el siguiente script sin mirar la solución propuesta.
Crea un script para buscar un fichero en un directorio determinado. El script de nombre buscar
recibe dos argumentos, el primero el directorio y el segundo el fichero. Debe mostrar mensajes
de error que identifiquen adecuadamente cualquier problema de ejecución:
#!/bin/sh

#Comprobar argumentos
if [ $# -ne 2 ]; then
echo "Error: Número de argumentos erroneo"
echo "Uso: buscar directorio archivo"
exit 1
fi

DIRECTORIO=$1
FICHERO=$2

#Comprobar que existe directorio


if [ -d $DIRECTORIO ]; then
echo "Error: El directorio $DIRECTORIO no existe"
echo "Uso: buscar directorio archivo"
exit 2
fi

#Busqueda del fichero


find $DIRECTORIO -name $FICHERO 2>/dev/null
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

Actividad 5. Creación de scripts


1. Crea el siguiente script sin mirar la solución propuesta.
Crea un script para buscar un fichero en un directorio determinado. Crea un script de unix que
abra el archivo /etc/hosts, y separe los valores almacenados en tres archivos: el primero
contendra solo las direcciones IP; el segundo contendra solo los nombres que incluyen el
dominio; el tercero contendra solo los nombres sin el dominio.
El script de nombre separar_en_ficheros recibe tres argumentos, que corresponden a los
nombres los archivos donde se dejarán los resultados.
Debes incluir las comprobaciones sobre el numero de argumentos
#Comprobar numero de argumentos
if [ $# -ne 3 ]
then
echo "Uso: separarEnFicheros fichIP fichFQDN fichHostname"
echo ""
exit 1
fi

#Extraer los nombres de los ficheros


FICH_IP=$1 #Direcciones IP
FICH_FQDN=$2 #Direcciones dns FQDN
FICH_HOSTNAME=$3 #Direcciones dns solo hostname

#Inicializamos variables
LINEAS=`cat /etc/hosts`
CONTADOR=1

#Recorremos las lineas del fichero


for LINEA in $LINEAS
do
#Dirigimos la linea al fichero correspondiente
case $CONTADOR in
1 )
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

Actividad 6. Creación de scripts


1. Crea el siguiente script sin mirar la solución propuesta.
Crea un script para clasificar los ficheros que pertenecen a un directorio determinado. El script
de nombre clasificar_ficheros debe mostrar tres listas, la primera con los ficheros leíbles, la
segunda con los ficheros modificables y la última con los ficheros ejecutables.
Recibe un único argumento, el directorio a clasificar. Debes incluir las comprobaciones sobre el
numero de argumentos
#!/bin/sh

#Comprobamos que recibe un unico argumento


if [ $# -ne 1 ]; then
echo "Error: Número de argumentos erroneo"
echo "Uso: clasificar_ficheros directorio"
exit
fi

#Recuperamos el argumento
DIRECTORIO=$1

#Comprobamos que existe el directorio


if [ ! -d $DIRECTORIO ]; then
echo "Error: No existe el directorio $DIRECTORIO"
exit
fi

#Ficheros legibles
CABECERA="SI"
for FICHERO in `ls $DIRECTORIO`; do
if [ -r $DIRECTORIO/$FICHERO ]; then
#Imprimimos la cabecera si es necesario
if [ $CABECERA = "SI" ]; then
CABECERA="NO"
echo "Los ficheros legibles son:"
fi

echo " $FICHERO"


fi
done

#Ficheros modificables
CABECERA="SI"
for FICHERO in `ls $DIRECTORIO`; do
if [ -w $DIRECTORIO/$FICHERO ]; then
#Imprimimos la cabecera si es necesario
if [ $CABECERA = "SI" ]; then
CABECERA="NO"
echo "Los ficheros modificables son:"
fi
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

echo " $FICHERO"


fi
done

#Ficheros ejecutables
CABECERA="SI"
for FICHERO in `ls $DIRECTORIO`; do
if [ -x $DIRECTORIO/$FICHERO ]; then
#Imprimimos la cabecera si es necesario
if [ $CABECERA = "SI" ]; then
CABECERA="NO"
echo "Los ficheros ejecutables son:"
fi

echo " $FICHERO"


fi
done
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

Actividad 7. Creación de scripts


1. Crea el siguiente script sin mirar la solución propuesta.
Crea un script para ejecutar algunos comandos de red. El script de nombre comandos_red
recibe un argumento que indica la operación a realizar:
1) Ver nombre del ordenador"
2) Ver nombre del dominio"
3) Ver configuración de la tarjeta de red"
4) Ver la tabla de enrutamiento"
5) Ver los ordenadores conectados a la red"
Debe mostrar mensajes de error que identifiquen adecuadamente cualquier problema de
ejecución:
#!/bin/sh

#Comprobar número de argumentos


if [ $# -ne 1 ]; then
echo "Error: Número de argumentos erroneo."
echo "Uso: comandos_red opcion"
echo " 1) Ver nombre del ordenador"
echo " 2) Ver nombre del dominio"
echo " 3) Ver configuración de la tarjeta de red"
echo " 4) Ver la tabla de enrutamiento"
echo " 5) Ver los ordenadores conectados a la red"
exit 1
fi

#Vemos la operacion seleccionada


case $1 in
1 )
echo "El nombre del ordenador es: "`hostname`
;;
2 )
echo "El nombre del dominio es "`domainname`
;;
3 )
echo "La configuración de la tarjeta de red es: "
/sbin/ifconfig
;;
4 )
echo "La tabla de enrutamiento es: "
/sbin/route
;;
5 )
#Bucle para ver las direcciones IP de los equipos
echo "Los ordenadores conectados a la red son: "
BASE_IP=172.16.33.
CONTADOR=0
while [ $CONTADOR -lt 256 ]; do
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

ping $BASE_IP$CONTADOR -c1 > /dev/null 2>/dev/null


if [ $? -eq 0 ]; then
echo Ordenador $BASE_IP$CONTADOR conectado
fi
CONTADOR=`expr $CONTADOR + 1`
done
;;
esac
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

Actividad 8. Creación de scripts


1. Crea el siguiente script sin mirar la solución propuesta.
Crea un script para realizar la copia de seguridad de un directorio determinado. El script de
nombre crear_copia recibe cero o un argumentos. Si recibe cero argumentos realiza la copia
de seguridad del directorio actual, si es un argumento será el directorio a copiar. La copia se
almacenará en un fichero comprimido, cuyo nombre será CSfecha.tar.gz.
Debe mostrar mensajes de error que identifiquen adecuadamente cualquier problema de
ejecución:
#!/bin/sh

#Comprobar argumentos
if [ $# -gt 1 ]; then
echo Error: Número de argumentos erroneo
echo Uso: CrearCopia [directorio]
exit 1
fi

#Si no hay argumento, se hace copia del directorio actual,


#sino del directorio pasado como argumento
if [ $# -eq 0 ]; then
DIRECTORIO=./
else
DIRECTORIO=$1
fi

#Comprobamos que existe el directorio


if [ ! -d $DIRECTORIO ]; then
echo Error: El directorio $DIRECTORIO no existe
exit 2
fi

#Obtenemos la fecha para el nombre del archivo


NOMBRE_FICHERO="CS"`date +%Y%m%d`".tar"
echo Realizando copia de seguridad: $NOMBRE_FICHERO.gz

#Agrupamos los archivos del directorio en uno solo


echo Agrupando ficheros.......
tar -cvf $NOMBRE_FICHERO $DIRECTORIO

#Comprimimos los ficheros


echo Comprimiendo ficheros....
gzip $NOMBRE_FICHERO

#Mensaje de fin
echo Copia de seguridad realizada: $NOMBRE_FICHERO.gz
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

Actividad 9. Creación de scripts


1. Crea el siguiente script sin mirar la solución propuesta.
Crea un script para usuarios en un grupo determinado. Emplea el comando adduser. El script
de nombre nuevo_usuario recibe uno o dos argumentos. Si recibe un argumento este es el
nombre del usuario a crear, y si recibe dos argumentos el primero es el nombre del usuario a
crear y el segundo el grupo al que pertenecerá el usuario.
Debe mostrar mensajes de error que identifiquen adecuadamente los siguientes problemas: el
usuario ya existe; el grupo indicado no existe; y no se puede bloquear el fichero de usuarios
/etc/passwd; Si la operación finaliza correctamente debe indicarlo al usuario.
#!/bin/sh

#Limpiamos la pantalla
clear

#Comprobar argumentos
if [$# -eq 0 –o $# -gt 2 ]; then
echo "Error: Número de argumentos erroneo"
echo "Uso: Nuevo_usuario usuario [grupo]"
exit 100
fi

#Recuperamos los argumentos


NOMBRE_USUARIO=$1

#Creamos el usuario
if [ $# -eq 1 ]; then
/usr/sbin/adduser $NOMBRE_USUARIO 2>/dev/null
else
NOMBRE_GRUPO=$2
/usr/sbin/adduser $NOMBRE_USUARIO -g $NOMBRE_GRUPO \
2>/dev/null
fi

#Comprobar errores
ERROR=$?
case $ERROR in
9 ) #El usuario ya existe
echo "Error: El usuario $NOMBRE_USUARIO ya existe"
exit 9
;;
6 ) #El grupo no existe
echo "Error: El grupo $NOMBRE_GRUPO no existe"
exit 6
;;
1 ) #No se puede bloquear el fichero de claves
echo "Error: No se puede bloquear el fichero de claves"
exit 1
;;
0 )
Diseño de aplicaciones informáticas.
Sistemas operativos multiusuario y en red.

if [ $# -eq 1 ]; then
echo "El usuario $NOMBRE_USUARIO ha sido creado"
else
echo "El usuario $NOMBRE_USUARIO ha sido creado \
en el grupo" $NOMBRE_GRUPO
fi
;;
esac

Vous aimerez peut-être aussi