EJERCICIOS DE SHELLResueltos

April 19, 2017 | Author: josemi123456 | Category: N/A
Share Embed Donate


Short Description

Download EJERCICIOS DE SHELLResueltos...

Description

EJERCICIOS DE SHELL-SCRIPTS RESUELTOS LA MAYORÍA. 1.- Escribir un Shell-script llamado tabla que pida un número por teclado (del 1 al 10) y muestre su tabla de multiplicar de ese número, según el siguiente formato:

Tabla a repasar:

4

4x1=4 4x2=8 4x3=12, etc #!/bin/bash echo “Introduzca un nº(entre 1 y 10): read num i=1 while [ $i –le 10 ] do echo “$num x $i = ”`expr $num “*” $i` done 2.- Escribir un shell-script denominado fileodir que compruebe que el parámetro que se le ha pasado es un fichero y en caso afirmativo muestre su contenido. Si el parámetro es un directorio deberá mostrar los ficheros que contiene. También, debe aceptar más de un parámetro.

#!/bin/bash for i in $* do if [ -f $i ] then cat $i elif [ -d $i ] then cd $i ls –al fi 1

done 3.- Escribir un shell-script llamado sesion que se ejecute en segundo plano y finalice su ejecución cuando exista más de dos sesiones abiertas en el sistema por el usuario que se pase como parámetro. Al finalizar el script, éste deberá mandar un mensaje a todas las consolas y terminales donde root inició una sesión con el siguiente mensaje:

“El usuario acaba de iniciar una sesión en el sistema” donde es el usuario pasado como parámetro

#!/bin/bash if [ ps -e 4.- Escribir un shell-script llamado datos, al que se le pase un archivo de texto desde la línea de comandos y una opción. Si el archivo no existe lo crea conteniendo la fecha actual y el login (nombre de inicio de sesión) del usuario que ejecuta el script con los siguientes permisos rw- r-rw. Si el archivo existe, mostrará un mensaje según una de las siguientes opciones:

./datos

[opción]

archivo.txt

-n: el número de lineas del archivo Ej: archivo.txt (24 líneas) -p: los permisos del archivo Ej: archivo.txt permiso: -rwx r-

r-

-t: el contenido del archivo ordenado Si el archivo no existe, deberá mostrar un mensaje por Ej:

El archivo < archivo.txt> no existe donde archivo.txt es el archivo pasado como parámetro Nota: Se supone que el archivo debe estar home del usuario

5.- Dado el siguiente archivo personas.txt

Ana;Perrrrrrrales;1000 Pedro;Soria;1600

2

en el directorio

Jacinto;Manzano;500 Claudia;Pastor;600 Xavier;Granados;1000 Soraya;Annnnnnnneja;3000 Xavier;Guerra;4500 Sara;Siria;675 Pablo;Serrano;1000 Sonia;Mono;1600 a.- Guarda en el fichero personas2.txt las personas cuyo nombre empiece por J y S.

grep "^J" personas.txt > personas2.txt grep "^S" personas.txt >> personas2.txt b.- Quita aquellas personas cuyos nombres no empiezan por S y cópialas en un archivo denominado personas3.txt

grep -v "^S" personas.txt > personas3.txt grep ^[^S] personas.txt > personas3.txt c.- Ordena las personas por su sueldo

sort -n -t\; -k3 personas.txt d.- Ordena las personas por el tercer carácter de su apellido

sort

-t\; -k2.3 personas.txt

e.- Muestra ordenada las personas que cobran 1000 euros.

grep 1000 personas.txt | sort f.- Indica cuántas personas comienza su apellido por S.

cut -d\; -f2 personas.txt | grep "^S" | wc -l g.- Borra las letras que sean repetidas

tr -s [A-Z] < personas.txt | tr -s [a-z] h.- Sustituye los nombres llamados Xavier por Javier.

sed 's/Xavier/Javier/' personas.txt i.- Guarda en un archivo llamado personas4.txt desde la 4ª hasta la 8ª persona.

head -n8 personas.txt | tail –n5>personas4.txt 4,5,6,7,8. 5 en total

#

j.- Los sueldos de 1000 euros han aumentado a 1200. Cámbialos. 3

sed 's/1000/1200/g' personas.txt k- Buscar todos los archivos que hay en el directorio actual y en sus subdirectorios con extensión .txt y tienen permisos de lectura y escritura.

find . -name "*.txt" -perm /u+rw,g+rw,o+rw find . -name "*.txt" -perm 666 l.- -Cuenta el número de ficheros y directorios que existen en el home (directorio personal) del usuario.

find $HOME -type d | wc -l find $HOME -type f | wc -l find $HOME -maxdepth 1 -type d | wc -l find $HOME -maxdepth 1 -type f | wc -l m.- Borra los ficheros que comiencen con p en el directorio actual y en todos sus subdirectorios

find -name "p*" -exec rm {} \; n.- Mueve los ficheros que contienen en su nombre el texto mp3 al home del usuario.

find -name "*mp3*" -exec mv {} $HOME \; o.- Quita los blancos de los nombres de los ficheros del directorio home. dado un directorio como parámetro

find $HOME -name "*.txt" | tr -d " " find $HOME -name "*.txt" | sed 's/ //' 6.- Escribir un Shell-script llamado copia que reciba un directorio como primer parámetro, y a continuación una lista de ficheros. El script debe validar que los parámetros recibidos sean realmente ficheros y luego copiarlos al directorio recibido. Además debe comprobar que exista el fichero original y no la copia.

#!/bin/bash if [ -d $1 ] # si es directorio then for i in $* do if [ -f $i ] then cp $i $1 4

else echo “$i no es un fichero” fi done else #si el primer parám. no es directorio, error echo “$1 no es un directorio” fi 7.- Escribir un Shell-Script llamado lectura que genera un fichero llamado listaficheros que contenga los ficheros con permiso de lectura que haya en un directorio pasado como parámetro. El nombre del fichero debe incluir en su nombre la fecha y la hora, es decir listaficheros09-11-2010-18:00

#!/bin/bash if [ -d $1 ] then echo “lista de ficheros del directorio $1”>listaficheros$ (date +%d-%m-%Y-%H:%M)

for i in $1/* do ls –al $i>>listaficheros$(date

+%d-%m-%Y-%H:%M)

done else echo “$1 no es un directorio” fi 8.- Escribir un Shell-Script llamado busca que, partiendo del fichero generado en el ejercicio anterior, muestre todos los ficheros que contengan una palabra pasada como parámetro.

#!/bin/bash cat listaficheros*|grep $1 ]

5

9.- Escribir un Shell-script llamado cuenta que cuente cuántos ficheros y cuántos directorios hay en el directorio pasado como argumento

#!/bin/bash if [ -d $1 ] then directorios=0 ficheros=0 for i in $1/* do if [ -d $i ] then directorios=`expr $directorios “+” 1` else ficheros=`expr $ficheros “+” 1` fi done echo “ficheros= $ficheros” echo “directories= $directorios” else echo “$1 no es ningún directorio” fi 10.- Escribir un Shell-Script llamado lineas que muestre el fichero del directorio pasado como parámetro con más líneas.

#!/bin/bash if [ -d $1 ] then linMuestra=0 linActual=$linMuestra fichero=”” for i in $1/* do 6

if [ -f $i -a -r $i ] then linActual=`wc

-l

$i

|awk

'{print

$1}'` if [ $linActual -gt $linMuestra ] then linMuestra=$linActual fichero=$i fi fi done echo "el fichero con más líneas es $fichero y tiene $linMuestra líneas" else echo "$1 no es ningún directorio” fi 11.- Escribir un Shell-Script llamado compara que compare dos archivos (que se reciben como parámetro) y diga por pantalla cuál de ellos tiene mayor cantidad de líneas.

#!/bin/bash if [ $# -eq 2 -a -f $1 -a -f $2 ] then echo $1 echo $2 primero=`wc -l $1 |tr -s " " |cut -d" " -f1` segundo=`wc -l $2 |tr -s " " |cut -d" " -f1` echo $primero echo $segundo if [ $primero -gt $segundo ] then echo “$1 tiene más líneas que $2” else echo “$2 tiene más líneas que $1” 7

fi else echo "./compara.sh archivo1 archivo2” fi 12.- Crea un shell script que calcule la media de todos los números recibidos como parámetro. Nota: Comprobar que los parámetros son números.

#!/bin/bash total=0 for i in $* do variable=`echo $i |grep –e [:alpha:]` if [ “$variable” = “” ] then total=`expr $total “+” $i` else echo “$i no es numérico” fi done media=`expr Stotal \/ $#` echo “La media es $media” 13.- Crea un script que reciba un directorio como primer parámetro, y a continuación una lista de archivos. El script debe validar que los parámetros recibidos sean realmente archivos (y que existen) y luego copiarlos al directorio recibido. 14.- Desarrolla un script que reciba como parámetro un directorio. Verificar que el mismo existe y devolver la suma de los tamaños de todos los archivos (en kilobytes) que se encuentran en ese directorio.

#!/bin/bash if [-d $1 ] then tamanos=`ls -l $1 | tr -s " " | cut -d" " -f5` //tamanos: lista tamaño archivos total=0

//total: suma tamaños 8

for i in $tamanos do total=`expr total + $i` done totalkb=`expr total / 1024` echo $totalkb fi 15.- Realizar un script que espere hasta que un determinado proceso se ejecute, y cuando este proceso se ejecuta, matarlo. Cuando ocurra tal evento, deberá mandar un mensaje a root informando de tal evento. Nota: No se puede usar el comando killall.

#!/bin/bash if [ $# -eq 1

]

then while [ 1 ] do proceso=`ps -e | grep $1 | tr -s " " | cut -d" " -f2` //busca proceso if [ $? -eq 0 ] then kill -9 $proceso nombre_proceso=`ps -e | grep $1 | tr -s " " | cut -d" " -f5` echo "$nombre_proceso:$proceso:`date +%D`:`date +%R`" >> /var/log/mata.log fi done fi 16.- Realizar un Shell-script que realice una copia de seguridad de los directorios /etc, y /var. La copia de seguridad se denominará backup-mesdía-año.tar.gz y se almacenará en un dispositivo removible (por ejemplo un pendrive o memorystick)

9

Este script se deberá ejecutar todos los días a partir de las 12 de la noche (la mejor hora para realizar las copias). Por ejemplo, si realizaras la copia de seguridad el 7 de diciembre, se denominaría backup-07-12-10.tar.gz Nota: Para montar y desmontar dispositivos removibles deberás ejecutar el siguiente comando: mount -t vfat /dev/sdb1 /media/disk umount /media/disk 17.- Realizar un Shell-script que muestre la información sobre las cuentas de usuario que contiene un fichero pasado como argumento. Las filas del fichero contendrán un nombre en cada fila. En el caso de que una cuenta de usuario no exista, deberá mostrar un mensaje de error y su directorio personal. La información se almacenará en un archivo con el siguiente formato: login:nombre_grupo:directorio_personal:shell Por Ejemplo: Si el usuario fuera JRGonzalez, está incluido en el grupo de los contables, su directorio personal es /home/JRGonzalez y su shell /bin/bash, deberá mostrar el siguiente mensaje. JRGonzalez:contables:/home/JRGonzalez:/bin/bash Nota: Los ficheros con los que tienes que trabajar para desarrollar este script son /etc/passwd (usuarios del sistema) y /etc/group (grupos del sistema).

10

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF