Vous êtes sur la page 1sur 16

Prctica 1

Ejercicio 1 Crea un guin que ejecute las siguientes tareas: * Visualice una cadena en la pantalla en la que aparezca el autor del shell script. * Muestre el directorio actual. * Muestre la fecha y la hora del sistema. * Muestre los usuarios conectados actualmente a la mquina. Uso los comandos: pwd (para mostrar la ruta actual), date (para mostrar la fecha) y w (para mostrar los usuarios) junto con una funcin que muestra el autor. #!/bin/bash #Practica 1. Autor: Francisco Jess Olaso Alcaide function creditos { echo "Autor : Francisco Jess Olaso Alcaide" } creditos echo "Ruta actual : $(pwd)" echo "Estamos a $(date)" echo "Usuarios online $(w|less)" exit 0 Ejercicio 2 Ejecuta el guin anterior y almacena su salida en un fichero que se llame salida1.txt (utiliza redireccionamiento de comandos). Si le pasamos un parmetro, lo reconoce como el nombre del archivo que guardar la salida del script 1. #!/bin/bash # Practica 2. Autor: Francisco Jess Olaso Alcaide if [ $# -ne 1 ];then echo "La sintaxis es $0 nombre_script_a_guardar_en_salida.txt" exit 1 else $1 > salida.txt fi Ejercicio 3 Realiza una macro que realice una copia del fichero anterior cuyo nombre sea salida2.txt y aada al final el contenido ordenado, alfabticamente por la primera columna, del fichero salida1.txt al fichero salida2.txt.

Si le pasamos un parmetro, copiara el contenido de un fichero a salida2.txt y luego copiar debajo de salida2.txt el contenido del fichero pero con las lneas ordenadas. #!/bin/bash # Practica 3. Autor : Francisco Jess Olaso Alcaide if [ $# -ne 1 ];then echo "La sintaxis es $0 nombre_salida.txt" else cat $1 > salida2.txt sort $1 >> salida2.txt fi Ejercicio 4 Crea un archivo de guin que realice al ejecutarse la siguiente estructura de directorios:(...) Crea una ruta de directorios con la orden MKDIR. #!/bin/bash # Practica 4. Autor: Francisco Jess Olaso Alcalde echo "Generando ruta de directorios..." mkdir $HOME/macros mkdir $HOME/macros/ficheros mkdir $HOME/macros/ficheros/practica5 mkdir $HOME/macros/otras mkdir $HOME/macros/otras/practica5 mkdir $HOME/macros/otras/util echo "Rutas creadas en $HOME" exit 0

Ejercicio 5 Realizar una macro que reciba como primer parmetro el camino completo de un directorio de la estructura anterior al que se realizar una copia del fichero salida1.txt. La macro deber ejecutarse desde tu directorio HOME. Si existe el archivo salida1.txt en nuestro HOME y le pasamos un argumento al script, lo entender como el directorio al que copiar salida1.txt

#!/bin/bash#Practica 5. Autor: Francisco Jess Olaso Alcalde if [ $(pwd) = $HOME ];then if [ ! -e "$HOME/salida1.txt" ];then echo "No podemos realizar la copia de $HOME/salida1.txt porque no se encuentra el fichero" elif [ $# -ne 1 ];then echo "La sintaxis debe de ser $0 ruta_donde_guardar_salida1.txt" else cp salida1.txt $1 fi else echo "El script debe de ser ejecutado en la ruta $HOME" fi Ejercicio 6 Realizar una macro que reciba como primer parmetro el nombre de un directorio y como segundo parmetro el nombre de un fichero. La macro deber realizar una copia del fichero salida1.txt del directorio HOME al directorio pasado como primer parmetro y con el nombre indicado por el segundo parmetro. Uso de funciones. Comprobar si existe un directorio pasado por primer parmetro. Comprobar si existe el salida1.txt en el HOME. Si las dos condiciones se cumplen, copiar el salida1.txt al directorio del primer parmetro con el nombre del segundo parmetro. #!/bin/bash #Practica 6. Autor: Francisco Jess Olaso Alcaide function ayuda { echo "El programa recibe dos parametros : el nombre de un directorio" } function compruebaDirectorio { if [ ! -d $1 ];then error=1 fi } function compruebaFichero { if [ ! -e $HOME/salida1.txt ];then error=1 fi } error=0

if [ $# -ne "2" ];then ayuda else compruebaDirectorio $1 if [ $error = "0" ];then compruebaFichero if [ $error = "0" ];then cp $HOME/salida1.txt $1/$2 echo "Correcto" else echo "Error de fichero" ayuda fi else echo "Error de directorio" ayuda fi fi Ejercicio 7 Realizar una macro que pida al usuario por teclado el nombre de un fichero para posteriormente realizar una bsqueda de dicho fichero por todo el rbol de directorios de tu cuenta. Si se encuentra alguna copia del fichero deber salir su camino en la pantalla. La macro deber llamarse busca. Le pregunta al usuario un nombre del archivo y a travs del comando FIND lo busca desde nuestro HOME. #!/bin/bash #Practica 7. Autor: Francisco Jess Olaso Alcaide echo "Archivo a buscar : " read archivo find $HOME -name $archivo Ejercicio 8 La orden ps -af visualiza en la pantalla informacin acerca de todos los procesos que estn ejecutando actualmente en la mquina todos los usuarios. Escribir una macro que visualice nicamente los procesos asociados a un determinado usuario pasado como parmetro. Dos formas diferentes de resolverlo: con la orden PS y GREP con PS. #!/bin/bash #Practica 8. Autor: Francisco Jess Olaso Alcaide ps -afu $1

#!/bin/bash #Practica 8. Autor: Francisco Jess Olaso Alcaide ps -af | grep $1 | grep -v grep Ejercicio 9 Modificar la macro anterior para que la propia macro solicite la entrada desde el teclado del nombre de usuario del cual buscar sus procesos e indique el nmero de dichos procesos que actualmente se estn ejecutando en la mquina. Uso una variable que contiene el nmero de lneas que se muestra de un usuario al ejecutar ps. #!/bin/bash # Practica 9. Autor: Francisco Jess Olaso Alcaide echo -n "Usuario : " read usuario ps -fu $usuario contador=$(ps -fu $usuario | grep $usuario | wc -l) echo "Procesos ejecutandose --> $contador"

Prctica 2
Ejercicio 1 Desarrolle un script que reciba dos argumentos por la linea de ordenes, el nombre de un fichero y un numero que representa el numero de linea del fichero que el script debe enviar a su salida estandar. Si recibe dos argumentos, donde el primero es una lnea y el segundo un archivo existente, te muestra la lnea correspondiente. #!/bin/bash # Practica 1 if [ $# -ne 2 ];then echo "La sintaxis correcta es $0 linea archivo_a_mostrar" exit 1 elif [ ! -e "$2" ];then echo "El archivo escogido no existe" exit 1 else head -$1 $2 | tail -1 exit 0 fi Ejercicio 2 El fichero /etc/passwd contiene informacin administrativa sobre los usuarios del sistema; en particular contiene los nombres de los usuarios dentro del sistema y en la vida real. Desarrollar un programa que muestre en pantalla un listado de los nombres, de usuario y reales, existentes en ese fichero. -dSEPARADOR -fCOLUMNAS #!/bin/bash # Practica2 echo "Login:Nombre real" echo "-----------------------" cut -d: -f1,5 /etc/passwd

Ejercicio 3 Desarrollar un shell script que reciba dos parmetros, un directorio y una cadena de caracteres a buscar en todos los ficheros regulares que cuelguen debajo del directorio especificado.

Mostramos las lneas que contengan el parmetro 2 de la salida del FIND que usa el parmetro 1. #!/bin/bash # Practica 3 if [ $# -ne 2 ];then echo "La sintaxis correcta es $0 ruta cadena_a_buscar" exit 1 else grep $2 $(find $1) exit 0 fi Ejercicio 4 Definir un alias para la orden anterior de forma que busque en todo el arbol de directorios la cadena que se especifique. Utilice el alias definido para crear otro que muestre el nmero de ficheros en los que se menciona su nombre de usuario y el nombre de los ficheros. Para usar el alias debemos poner la linea al archivo de inicio de sesion y cargarlo con el comando Source "(Sintaxis: Source nombreFichero)" #!/bin/bash # Practica4 alias cadena="p3.sh /" echo "Generado el alias cadena. Uso: cadena cadena_a_buscar_desde_la_raiz" Ejercicio 5 Cree su propia versin de la orden administrativa adduser, que permite aadir un nuevo usuario al sistema. Este proceso consiste en crear una nueva entrada en su fichero passwd y generar un subdirectorio con el nombre del nuevo usuario. Uso GREP para comprobar si existe un usuario en /etc/passwd. Si no existe se aade y se gener su ruta HOME. #!/bin/bash # Practica 5 echo "Nuevo usuario" echo -n "Login : " read nombre grep $nombre /etc/passwd if [ $? = 0 ];then echo "existe" exit 1 else echo -n "Nombre Usuario: "

read nombreUsuario echo $nombre:x:::$nombreUsuario:/:/bin/bash >>/etc/passwd mkdir /home/$nombre exit 0 fi Ejercicio 6 Desarrolle un alias que permita eliminar un usuario y su directorio asociado de su fichero de contrasenyas. Uso GREP para comprobar si existe un usuario. Si existe se borra del /etc/passwd y se borra su ruta HOME #!/bin/bash # Practica 6 echo "Login del usuario a eliminar: " echo -n "Login : " read nombre grep $nombre /etc/passwd if [ $? = 1 ];then echo "No existe" exit 1 else echo "Generando archivo temporal" cp /etc/passwd /etc/passwd.tmp echo "Eliminando usuario del archivo passwd" grep -v $nombre /etc/passwd.tmp > /etc/passwd rm /etc/passwd.tmp echo "Borrando carpeta del usuario"rm -rf /home/$nombre exit 0 fi

Ejercicio 7 Desarrolle un shell script, de nombre matador, que reciba como parmetro el nombre de un proceso en ejecucin y lo elimine, mostrando adems un mensaje como: El proceso nombre_proceso con PID PID_proceso_eliminado ha sido eliminado. Uso del PS, GREP y CUT para sacar el PID de un proceso concreto y matarlo con la orden KILL. #!/bin/bash # Practica 7 echo "Matando $1" PiD=$(ps -u $LOGNAME | grep $1 | cut -d' ' -f2) kill $PiD echo "El proceso $1 con PID $PiD ha sido eliminado"

Ejercicio 8 Desarrolle el script invierteLinea que recibe un numero cualquiera de palabras por la linea de ordenes y las envia en una unica linea a la salida estndar en orden inverso al que aparecian en la llamada. Invertir una cadena con una estructura en forma de PILA. #!/bin/bash #Practica 8 while [ $# -gt 0 ]; do cadena="$1 $cadena" shift done echo $cadena exit 0 Ejercicio 9 Empleando el script anterior, escriba otro de nombre invertir, que recibe como parmetro el nombre de un fichero cuyas palabras sern enviadas a la salida estndar en orden inverso, empezando por la ultima lnea. Usamos la orden WC y CUT para saber el nmero de lneas de un archivo. Usamos el script 1 para mostrar lnea a lnea desde el final. Cada lnea ser mostrada a travs del script 8 que invierte el orden de las palabras. #!/bin/bash #Practica 9 n=$(wc -l $1 | cut -d' ' -f8) while [ $n -gt 0 ];do cadena=$(p1.sh $n $1) p8.sh $cadena let n=n-1 done Ejercicio 10 Mandar un archivo a la papelera. Si existe la papelera (o se crea si es la primera vez ) y el archivo, lo empaquetamos y comprimimos con TAR y GZIP, borramos el original y enviamos el comprimido a la papelera. #!/bin/bash # Practica 10 if [ -d $HOME/.papelera ]; then echo "Papelera encontrada" else echo "No existe la papelera". mkdir $HOME/.papelera

echo "Papelera generada." fi if [ $# -ne 1 ];then echo "La sinxatis correcta es $0 nombre_a_borrar" exit 1 else tar -cvf $1.tar $1 gzip $1.tar rm -rf $1 mv $1.tar.gz $HOME/.papelera fi Ejercicio 11 Men para recuperar un archivo o vaciar la papelera. Si existen archivos en la papelera, se muestra un men del cual se llama a una funcin recuperar o a la funcin vaciar. #!/bin/bash #Practica 10 Menu function recuperar { clear j=0 for eliminado in $(ls $HOME/.papelera);do let "j=j+1" echo "$j . $eliminado" done echo "Numero del archivo a recuperar" read numero j=0 for eliminado in $(ls $HOME/.papelera);do let "j=j+1" if [ $j = $numero ];then mv $HOME/.papelera/$eliminado $HOME/temp.tar.gz gunzip $HOME/temp.tar.gz tar -xvf $HOME/temp.tar rm $HOME/temp.tar echo"El archivo recuperado se encuentra en$(pwd)" read fi done } function vaciar { echo "vaciando..." rm -rf $HOME/.papelera/*.* } n=0 if [ -d $HOME/.papelera ];then

for i in $(ls $HOME/.papelera);do let "n=n+1" done if [ $n -ne 0 ];then echo "Tiene elementos en la papelera" while [ 1 ];do clear echo "1.Recuperar un archivo" echo "2.Vaciar papelera" echo "Q.Terminar" read opcion case "$opcion" in 1) recuperar ;; 2) vaciar Break ;; q|Q) break ;; *) echo "Opcion Incorrecta" ;; esac done fi fi

Prctica 3
Ejercicio 1 Realizar un script de nombre ayuda que pueda recibir como parmetro la opcin -h o el nombre de un fichero. Si recibe el nombre de un fichero, muestra si existe o no y de que modo es accesible. Si recibe como parmetro -h, muestra por pantalla un men de ayuda. Estructura bsica con if , elif e if #!/bin/bash # Practica1 if [ $# -ne 1 ];then echo "Error de sintaxis en la llamada al script . $0 h si necesita ayuda" else if [ $1 = "-h" ];then echo Ayuda elif [ -e $1 ];then echo Existe fichero else echo Fichero no encontrado fi fi Ejercicio 2 Crear un shell script de nombre crear que reciba como parmetro el nombre de un fichero. Comprobara si existe y en caso negativo lo crear, permitiendo que el usuario introduzca texto en el. Uso de la estructura anterior y un men con case y read. #!/bin/bash # Practica2 function menu { while [ 1 ];do clear echo "Archivo $1 en proceso" echo "1. Introducir lnea" echo "2. Borrar archivo" echo "3. Mostrar archivo" echo "4. Salir" read opcion

case "$opcion" in 1) echo -n "Escriba y pulse intro para acabar: " read linea echo $linea >> $1 ;; 2) echo > $1 ;; 3) cat $1 read ;; 4) break ;; *) echo "Opcin incorrecta" read ;; esac done } if [ $# -ne 1 ];then echo "Error de sintaxis en la llamada al script . $0 h si necesita ayuda" else if [ $1 = "-h" ];then echo Ayuda elif [ -e $1 ];then echo -n "Desea mantener su contenido? (S/N) : " read opcion case "$opcion" in n|N) echo > $1 esac menu $1 else menu $1 fi fi Ejercicio 2-2 Ampliar el script anterior para que opere del mismo modo pero permitiendo como parmetros un numero cualquiera de nombres de fichero. Uso de while y shift #!/bin/bash # Practica2 ayuda=0 if [ $# -lt 1 ];then echo "Error de sintaxis en la llamada al script . $0 h si necesita ayuda" else

while [ $# -gt 0 ];do if [ $1 = "-h" ];then if [ $ayuda = 0 ];then echo Ayuda break fi else p2.1.sh $1 fi ayuda=1 shift done fi Ejercicio 3 Ahora se desea tener un script de nombre anyadir, que puede recibir como parmetros uno o dos nombres de fichero. Si recibe uno, permite el usuario aadir texto a ese fichero de modo interactivo. Si son dos, aade al segundo el contenido del primero. #!/bin/bash # Practica3 function Error { echo "Error de sintaxis en la llamada al script . $0 h si necesita ayuda" } ayuda=0 if [ $# -lt 1 ];then Error else if [ $# = "1" ];then if [ $1 = "-h" ];then echo Ayuda else p2.1.sh $1 fi elif [ $# = "2" ];then if [ $1 = "-h" ];then Error elif [ -e "$1" ];then if [ -e "$2" ];then cat $2 >> $1 fi fi else Error fi fi

Ejercicio 4 Se pide realizar el script de nombre datos que responde a la siguiente sintaxis de llamada:datos fich_destino . Este script pedir el nombre, primer y segundo apellido, DNI, edad y fecha de nacimiento, aadiendo esta informacin al fichero fich_destino. #!/bin/bash #Practica 4 echo -n "Nombre y Apellidos : " read nombre apellido1 apellido2 echo -n "fecha de nacimiento (dia mes anyo) : " read dia mes anyo echo -n "DNI : " read dni edad="$(date | cut -d' ' -f6)" let "edad=edad-anyo" echo "$dni|$apellido1|$apellido2|$nombre|$edad" > $1 Ejercicio 5 Desarrollar un shell script ordena_parametros que enva ordenados a la salida estndar los parmetros que recibe por la lnea de ordenes. El numero mnimo de parmetros a procesar por la shell script ser de 2, no estando limitando el numero mximo. Si fuera invocada con menos parmetros mostrara en la salida de errores estndar un mensaje en el que se indique la forma de invocarla. #!/bin/bash #Practica 5 function ayuda { echo "La sintaxis correcta es $0 cadena1 cadena2 .. cadena_n (min2)" } if [ $# -lt 2 ];then ayuda else while [ $# -gt 0 ];do echo $1 >> temp shift done sort temp rm -rf temp fi Ejercicio 6 Implemente el script generador, que recibe 2 argumentos por su lnea de rdenes. La funcin de este script consiste en enviar a su salida estndar las lneas del fichero, que recibe como segundo

argumento, precedidas por la cadena de caracteres que recibe como primer argumento. #!/bin/bash #Practica 6 n=0 function ayuda { echo "La sintaxis correcta es $0 cadena fichero_con_lneas" } function generador { for i in $(cat $2);do echo $1$i done } if [ $# -ne "2" ];then ayuda else if [ -e "$2" ];then generador $1 $2 else ayuda fi fi

Vous aimerez peut-être aussi