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.

Imagen:5.jpg

6.- Comprueba tu identificador o nombre de presentación.

Imagen:6.jpg

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.

Imagen:ejer7.jpg

8.- Muestra en pantalla la fecha y la hora actuales. date

Imagen:8.jpg

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.

Imagen:9.jpg

10.- ¿Qué sistema Unix estás utilizando?. ¿Cuál es la versión y revisión correspondiente?.

Imagen:ejer10.jpg

11.- Muestra en pantalla el calendario actual.

Imagen:11.jpg

12.- Visualiza el calendario correspondiente al mes de junio de 1995.

Imagen:12.jpg

13.- Obtén el calendario completo del año 1995.

Imagen:ejercicio13.jpg

14.- Muestra en pantalla el mensaje “Bienvenidos a UNIX”.

Imagen:14.jpg

15.- Haz aparecer en pantalla un rótulo ampliado con la palabra UNIX.

Imagen:15.jpg

16.- Limpia la pantalla y ejecuta las siguientes órdenes: banner Buenos días

Imagen:ejercicio16.jpg

banner “Buenos días”

Imagen:ejercicio162.jpg

¿Tienen algún efecto las comillas?.

17.- Accede a la ayuda help correspondiente a las órdenes estudiadas.

Imagen:panic.jpg

18.- Revisa el contenido del manual de Unix correspondiente a las órdenes passwd, who, echo y exit.

Imagen:ejercicio18.jpg

[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