Prácticas de shell
De Documentacion NexuN
Contenido |
[editar] Prácticas
[editar] Práctica 1
1.- Abandona el sistema pulsando [ Ctrl + d ] y vuelve a acceder introduciendo tu identificador de usuario o presentación. Repite la práctica pero introduciendo un nombre erróneo.
2.- Cambia tu contraseña o palabra clave. Abandona el sistema y vuelve a acceder con la nueva clave.
3.- Abandona el sistema con la orden exit.
4.- Vuelve a acceder al sistema y cambia alguno de los caracteres de tu clave por su correspondiente en mayúsculas. ¿Se te permite el acceso?.
5.- Obtén la relación de usuarios conectados.
6.- Comprueba tu identificador o nombre de presentación.
7.- Ejecuta la orden who am i. Anota la hora de conexión. Abandona el sistema y vuelve a acceder a él. Ejecuta de nuevo la orden who am i y comprueba el cambio en la hora de conexión.
8.- Muestra en pantalla la fecha y la hora actuales. date
9.- Averigua cuál es la identificación de tu terminal con la orden tty. Ejecuta la orden who y comprueba que la identificación de tu terminal coincide con la anterior.
10.- ¿Qué sistema Unix estás utilizando?. ¿Cuál es la versión y revisión correspondiente?.
11.- Muestra en pantalla el calendario actual.
12.- Visualiza el calendario correspondiente al mes de junio de 1995.
13.- Obtén el calendario completo del año 1995.
14.- Muestra en pantalla el mensaje “Bienvenidos a UNIX”.
15.- Haz aparecer en pantalla un rótulo ampliado con la palabra UNIX.
16.- Limpia la pantalla y ejecuta las siguientes órdenes: banner Buenos días
banner “Buenos días”
¿Tienen algún efecto las comillas?.
17.- Accede a la ayuda help correspondiente a las órdenes estudiadas.
18.- Revisa el contenido del manual de Unix correspondiente a las órdenes passwd, who, echo y exit.
[editar] Práctica 2
[editar] Práctica 3
[editar] Práctica 4
[editar] Práctica 5
[editar] Práctica 6
[editar] Práctica 7
[editar] Práctica 8
[editar] Práctica 9
[editar] Práctica 10
[editar] Práctica 11
[editar] Práctica 12
[editar] Práctica 13
[editar] Práctica 14
[editar] Práctica 15
[editar] Práctica 16
[editar] Práctica 17
[editar] Scripts
[editar] Agenda
Creando Agenda:
En este script crearemos una agenda, la cual nos pida de forma interactiva el nombre, el apellido y el numero de teléfono, y los introduce en un archivo, el cual hemos pasado como primer parámetro, si el archivo no existe lo crea y añade los datos, y si existe añade los datos introducidos. Si no se pasa ningún parámetro, nos avisa de que no hemos pasado ningún parámetro.
#!/bin/bash
clear
if [ $# -eq 1 ]
then
echo "Introduzca nombre"
read nombre
echo "Introduzca apellido"
read apellido
echo "Introduzca telefono"
read telefono
if [ -f $1 ]
then
fecha=`date`
echo -e "$nombre:$apellido:$telefono:$fecha">>$1
else
echo "Se ha creado el fichero agenda"
echo "Ya que su parametro es incorrecto"
touch agenda
echo -e "$nombre:$apellido:$telefono:$fecha">>$1
fi
else
echo "Parametro vacio"
echo "Vuelva a ejecutar"
fi
[editar] Info1
Nos dice el numero de procesadores del sistema y su modelo ademas de la cantidad de memoria virtual total y la libre
#!/bin/bash clear cd /proc linea=`grep "model name" cpuinfo | wc -l` pro=`grep -m1 "model name" cpuinfo | cut -d: -f2` echo "el numero de procesadores es $linea y su modelo: $pro" memtot=`grep SwapTotal meminfo | cut -d: -f2 | sed s/" "/""/g` memfree=`grep SwapFree meminfo | cut -d: -f2 | sed s/" "/""/g` echo "la cantidad de memoria virtual total es $memtot y de la memoria libre es $memfree"
[editar] Info2
Script Info2: Queremos realizar un script el cual cuando le ejecutemos y pongamos cpu o memoria, nos indique las características de la cpu o de la memoria. De la cpu queremos que nos muestre el modelo de la cpu, el número de procesadores, la memoria cache y la frecuencia a la que trabaja. De la memoria queremos, la memoria total, la memoria libre, la memoria virtual total, y la memoria virtual libre.
El codigo es el siguiente:
#!/bin/bash clear cd if [ $1 == cpu ] then modelo=`grep -m 1 "model name" /proc/cpuinfo | cut -d ":" -f 2 | sed s/" "/""/g` velo=`grep -m 1 "cpu MHz" /proc/cpuinfo| cut -d ":" -f 2| sed s/" "/""/g` cach=`grep -m 1 "cache size" /proc/cpuinfo| cut -d ":" -f 2| sed s/" "/""/g` cpus=`grep -m 1 "model" /proc/cpuinfo| cut -d ":" -f 2| sed s/" "/""/g` echo "El procesador es: $modelo" echo "Tiene $cpus procesadores" echo "A una velocidad de $velo MHz" echo "Y una cache $cach" fi if [ $1 == memoria ] then memtot=`grep -m 1 "MemTotal" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g` memfre=`grep -m 1 "MemFree" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g` swtot=`grep -m 1 "SwapTotal" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g` swf=`grep -m 1 "SwapFree" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g` echo "La memoria total es $memtot" echo "La memoria libre es $memfre" echo "La memoria virtual total es $swtot" echo "La memoria virtual libre es $swf" fi
[editar] Info3
Scrip Info3: Queremos realizar un script el cual cuando le ejecutemos y pongamos cpu o memoria, nos indique las características de la cpu o de la memoria. De la cpu queremos que nos muestre el modelo de la cpu, el número de procesadores, la memoria cache y la frecuencia a la que trabaja. De la memoria queremos, la memoria total, la memoria libre, la memoria virtual total, y la memoria virtual libre, pero queremos que en vez de mostrarnos los kB, nos muestre las cantidades en Mb.
El codigo es el siguiente:
#!/bin/bash clear cd if [ $1 == cpu ] then modelo=`grep -m 1 "model name" /proc/cpuinfo | cut -d ":" -f 2 | sed s/" "/""/g` velo=`grep -m 1 "cpu MHz" /proc/cpuinfo| cut -d ":" -f 2| sed s/" "/""/g` cach=`grep -m 1 "cache size" /proc/cpuinfo| cut -d ":" -f 2| sed s/" "/""/g` cpus=`grep -m 1 "model" /proc/cpuinfo| cut -d ":" -f 2| sed s/" "/""/g` echo "El procesador es: $modelo" echo "Tiene $cpus procesadores" echo "A una velocidad de $velo MHz" echo "Y una cache $cach" fi if [ $1 == memoria ] then memtot=`grep -m 1 "MemTotal" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g | sed s/"kB"/""/g` memfre=`grep -m 1 "MemFree" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g | sed s/"kB"/""/g` swtot=`grep -m 1 "SwapTotal" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g | sed s/"kB"/""/g` swf=`grep -m 1 "SwapFree" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g | sed s/"kB"/""/g` echo "La memoria total es $(($memtot/1024)) Mb" echo "La memoria libre es $(($memfre/1024)) Mb" echo "La memoria virtual total es $(($swtot/1024)) Mb" echo "La memoria virtual libre es $(($swf/1024)) Mb" fi
[editar] Info4
info 4: nos sige llegando la informacion de lo k keremos(cpu o memoria), pero nos sale un menu con opciones para segun accedemos a
memoria o cpu, y nos pregunta si queremos memoria swap total, swap virtual, memoria total, memoria libre. y en la cpu, frecuencia,
procesador, numero de procesadores, y cache.
#!/bin/bash
clear
if [ $1 == memoria ]
then
echo "Escoge una opcion"
echo "1-> Para ver la memoria total."
echo "2-> Para ver la memoria libre."
echo "3-> Para ver la memoria virtual total."
echo "4-> Para ver la memoria virtual libre."
read op
case $op in
1)
memtot=`grep -m 1 "MemTotal" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g | sed s/"kB"/""/g`
echo "La memoria total es $(($memtot/1024)) Mb"
;;
2)
memfre=`grep -m 1 "MemFree" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g | sed s/"kB"/""/g`
echo "La memoria libre es $(($memfre/1024)) Mb"
;;
3)
swtot=`grep -m 1 "SwapTotal" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g | sed s/"kB"/""/g`
echo "La memoria virtual total es $(($swtot/1024)) Mb"
;;
4)
swf=`grep -m 1 "SwapFree" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g | sed s/"kB"/""/g`
echo "La memoria virtual libre es $(($swf/1024)) Mb"
;;
esac
fi
if [ $1 == cpu ]
then
echo "Escoge una opcion"
echo "1-> Para ver el modelo del procesador."
echo "2-> Para ver cuantos procesadores tiene."
echo "3-> Para ver la cache."
echo "4-> Para ver la velodicad de la cpu."
read op
case $op in
1)
modelo=`grep -m 1 "model name" /proc/cpuinfo | cut -d ":" -f 2| sed s/" "/""/g`
echo "El procesador es: $modelo"
;;
2)
cpus=`grep -m 1 "model" /proc/cpuinfo| cut -d ":" -f 2| sed s/" "/""/g`
echo "Tiene $cpus procesadores"
;;
3)
cach=`grep -m 1 "cache size" /proc/cpuinfo| cut -d ":" -f 2| sed s/" "/""/g`
echo "Tiene una cache de $cach"
;;
4)
velo=`grep -m 1 "cpu MHz" /proc/cpuinfo| cut -d ":" -f 2| sed s/" "/""/g`
echo "Tiene una velocidad de $velo MHz"
;;
esac
fi
[editar] Info5
introducir 2 PARAMETROS, siendo el 1º una aplicación y el 2º una cadena. Con el 1º comprobar que es una aplicación y es ejecutable y que comprube si se esta ejecutando, si es asi matarlo y que me informe de ello. El 2º localizar esa cadena en un fichero que nos va a pedir de forma intercativa y en caso de que exista eliminar.
#!/bin/bash
clear
if [ $# -eq 2 ]
then
echo "se han pasado 2 parametros"
pid=`ps | grep $1 | cut -c1-5`
if [ $? -eq 0 ]
then
echo "se esta ejecutando $1 y lo vamos a parar, pulse una tecla para continuar"
read
kill -9 $pid
else
echo "$1 no se esta ejecutando"
fi
echo "dime el nombre de un fichero"
read a
grep $2 $a > /dev/null
if [ $? -eq 0 ]
then
echo "se ha encontrado $2 en $a"
sed s/"$2"/""/g
else
echo "no se encuentra $2 en $a"
fi
else
echo "no se han pasado solo 2 parametros"
fi
[editar] Info6
Queremos localizar una cadena determinada dentro de un grupo de ficheros. El script nos pedira de forma interactiva el grupo de ficheros (utilizando metacaracteres) y la cadena a buscar
#!/bin/bash
clear
echo "Introduzca la palabra a buscar"
read nombre
echo "Introduzca en que archivos buscarla"
read archivo
fecha=`date +'%d%m%y' `
touch "encontrados$fecha"
touch "noencontrados$fecha"
for a in $archivo*
do
grep $nombre $a 2>/dev/null >/dev/null
if [ $? -eq 0 ]
then
echo "se ha encontrado $nombre en $a" >> "encontrados$fecha"
else
echo "no se ha encontrado $nombre en $a" >> "noencontrados$fecha"
fi
done
[editar] Info7
Vamos a realizar un script al cual le llegan solo 2 parámetros, si se mandan más o menos, nos mostrara un mensaje diciendo que solo queremos 2 parámetros. El primer parámetro, sera un directorio, y el segundo un fichero, ambos deben de existir, si no existen, nos mostrara un mensaje diciendo que no existen. Este script guardara ese fichero en ese directorio, con la siguiente información: - Número de ficheros ordinarios, que hay en el directorio home vuestro. - Memoria Ram instalada en el equipo, la que sea. - Numero de caracteres que tenia el fichero antes de hacer los 2 pasos anteriores, en total es: y los caracteres que tenga.
#!/bin/bash
clear
if [ $# -eq 2 ]
then
echo "se han pasado los 2 parametros"
else
echo "no se han pasado solo 2 parametros"
read
exit
fi
if [ -d $1 ]
then
echo "el parametro $1 es un directorio"
else
echo "el parametro $1 no es un directorio"
read
exit
fi
if [ -f $2 ]
then
echo "el parametro $2 es un fichero"
else
echo "el parametro $2 no es un fichero"
read
exit
fi
numar=0
fecha=`date +'%c' `
for a in *
do
if [ -f $a ]
then
numar=$((numar+1))
fi
done
memtot=`grep -m 1 "MemTotal" /proc/meminfo| cut -d ":" -f 2| sed s/" "/""/g | sed s/"kB"/""/g`
b=`wc -c $2`
echo "el numero de ficheros que hay en $HOME es $numar a fecha $fecha" >> $2
echo "La memoria total es $(($memtot/1024)) Mb a fecha $fecha" >> $2
echo "el numero de caracteres es $b a fecha $fecha" >> $2
cp $2 $1/$2
echo "Se han guardado los datos en $1/$2 "
[editar] Info8
Vamos a realizar un script al cual nos llega un fichero y un directorio. Queremos guardar en ese directorio el fichero, el numero de palabras que tiene el fichero, borrar las lineas en blanco y que nos diga cuantas hay, a continuación que modifique todos las lineas que empiecen por "n" que las ponga a mayusculas. Y por ultimo que intente localizar, dentro del directorio, todos los ficheros que tengan dentro la palabra ana dentro y que nos diga cuantos son.
[editar] Info9
Vamos a realizar un script, que nos dice si el numero de ficheros ordinarios es mayor que 5, que nos mande un mensaje diciendo tienes mas de 5 ficheros y mas de 3 directorios, y si el numero de ficheros es menor que 2 dara un mensaje diciendo tenga usted en cuenta k tiene menos de 2 ficheros.
#!/bin/bash
clear
#hola
numar=`ls -l | grep "^-" | wc -l`
numdir=`ls -l | grep "^d" | wc -l`
if [ $numar -gt 5 ]
then
echo " *********tiene mas de 5 ficheros********* "
read
else
echo " *******no tiene mas de 5 ficheros******** "
read
if [ $numar -lt 2 ]
then
echo " ********tiene menos de 2 ficheros******** "
read
else
echo " ******no tiene menos de 2 ficheros******* "
read
fi
fi
if [ $numdir -gt 3 ]
then
echo " *******tiene mas de 3 directorios******** "
read
else
echo " ******no tiene mas de 3 directorios****** "
read
fi
[editar] Info10
scrip con 2 parametros, 2 nombres de ficheros que vamos a crear, el primero de ellos va a tener la fecha y el nombre de todos los ficheros ordinarios de nuestro directorio que tengan una A, el segundo de ellos tendrá la fecha y el nombre de los directorios que contengan A
#¡/bin/bash
clear
if [ $# -eq 2 ]
then
echo " El numero de parametros es correcto "
else
echo " El numero de parametros ingresados es incorrectos "
read
exit
fi
if [ -f fic$1 -a dir$2 ]
then
echo " Los parametros ingresados existen y seran borrados "
read
touch fic$1 dir$2
else
touch fic$1 dir$2
echo " Los ficheros fic$1 y dir$2 han sido creados "
fi
for a in `ls *a*`
do
if [ -f $a ]
then
fecha=`ls -l $a|cut -d " " -f6`
echo "El nombre del fichero es:$a con fecha a $fecha">>fic$1
fi
if [ -d $a ]
then
fecha=`ls -l $a|cut -d " " -f6`
echo "El nombre del directorio es:$a con fecha a $fecha">>dir$2
fi
done
[editar] Info11
Un script que diga el numero de usuario conectados y si el usuario que se ha pasado como parametro 1 esta o no está en este momento contectado. La informacion se saque por pantalla y en un fichero llamada informacion.log
#!/bin/bash clear touch a who | cut -d " " -f1 >> a b=`who | wc -l` fecha=`date +'%d%m%y' ` grep -c $1 a >/dev/null if [ $? -eq 0 ] then echo "$1 esta conectado" else echo "$1 no esta conectado" fi echo " el numero de usuarios conectados es $b" if [ $? -eq 0 ] then echo "$1 esta conectado a fecha $fecha">>informacion.log else echo "$1 no esta conectado a fecha $fecha">>informacion.log fi rm a
[editar] Info12
Hacer un scrip que le pase una hora y una fecha y te diga si esta conectado
#!/bin/bash clear if [ $# -eq 2 ] then echo "Se han pasado 2 parametros" else echo "No se han pasado 2 parametros" exit fi a=`who | sed s/" "/" "/g |cut -d " " -f7| grep -m1 $1` if [ $? -eq 0 ] then b=`who | sed s/" "/" "/g |cut -d " " -f8| grep -m1 $2` c=`who | grep $a | grep $b | cut -d " " -f1` echo "el usuario $c esta conectado a fecha $a y a hora $b" else echo "no esta conectado" fi
[editar] Info13
Hacer un script que vaya añadiendo la siguiente información a un fichero llamado info13.log: Cada vez que se ejecute que añada la línea: Fecha, hora, numero de procesos en este instante: xx
#!/bin/bash clear fecha=`date` cd /proc num=`ls | grep ^[0-9]*[0-9]$ | wc -l` cd echo "$fecha, el numero de procesos es: $num" >> info13.log
[editar] Info14
Hacer un script que nos informe sobre el numero de usuario y el numero de grupo de un usuario concreto, por parámetro el fichero para guardar la información, si existe le añade sino lo crea, solicita por pantala el login de usuario, sino existe muestra un mensaje, si existe se muestra por pantalla la fecha el nombre de usuario el numero de usuario y numero de grupo y el nombre del grupo
#!/bin/bash clear if [ $# -eq 1 ] then echo "se ha pasado un parametro" else echo "no se ha pasado un parametro" exit fi if [ -f $1 ] then echo "el fichero $1 existe" read clear else echo "el fichero $1 no existe, lo vamos a crear" touch $1 fi cd /etc echo "Introduce el nombre de usuario a buscar" read nom grep $nom passwd > /dev/null if [ $? -eq 0 ] then fecha=`date` numusuario=`grep $nom passwd | cut -d ":" -f3` numgrupo=`grep $nom passwd | cut -d ":" -f4` nomgrup=`grep $nom passwd | cut -d ":" -f5 | cut -d " " -f1,2` cd echo "El usuario $nom tiene numero de usuario $numusuario, numero de grupo $numgrupo y perteneciente al grupo $nomgrup a fecha $fecha" | tee -a $1 else echo "el usuario $nom no existe" fi
[editar] Info15
Se le pasan 2 parametros, primero directorio y segundo fichero, tienen que existir en caso de no ser asi se acaba. Sacar un informe que se añade al fichero con la siguiente información: nombre del sistema, fecha y hora del informe, nº de directorios home en el sistema, nº de usuarios conectados, nº de procesos activos, el informe termina dando permiso de lectura y escritura al fichero para el resto de usuarios.
#!/bin/bash clear if [ $# -eq 2 ] then echo "se han pasado los 2 parametros" else echo "no se han pasado solo 2 parametros" read exit fi if [ -d $1 ] then echo "el parametro $1 es un directorio" else echo "el parametro $1 no es un directorio" read exit fi if [ -f $2 ] then echo "el parametro $2 es un fichero" else echo "el parametro $2 no es un fichero" read exit fi a=`uname` b=`date` contador=`ls -l | cut -d " " -f1 | grep ^d | wc -l` cd /proc procesos=`ls | grep ^[0-9]*[0-9]$ | wc -l` cd usuario=`who | wc -l` chmod 666 $2 echo "nombre del sistema: $a , fecha y hora del informe: $b, nº de directorios home en el sistema: $contador, nº de usuarios conectados: $usuario , nº de procesos activos: $procesos" | tee -a $1/$2















