Ejercicitario Taller de Programacion Shell Script
Ejercicitario Taller de Programacion Shell Script
1
EJERCICIOS TALLER SHELL-SCRIPTS - UTIC/FTI/LASI/CAAGUAZU 2022
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 <user> acaba de iniciar una sesión
en el sistema”
donde <user> 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
2
EJERCICIOS TALLER SHELL-SCRIPTS - UTIC/FTI/LASI/CAAGUAZU 2022
Jacinto;Manzano;500
Claudia;Pastor;600
Xavier;Granados;1000
Soraya;Annnnnnnnetto;3000
Xavier;Guerra;4500
Sara;Siria;675
Pablo;Serrano;1000
Sonia;Toro;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
EJERCICIOS TALLER SHELL-SCRIPTS - UTIC/FTI/LASI/CAAGUAZU 2022
4
EJERCICIOS TALLER SHELL-SCRIPTS - UTIC/FTI/LASI/CAAGUAZU 2022
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-07-2022-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
EJERCICIOS TALLER SHELL-SCRIPTS - UTIC/FTI/LASI/CAAGUAZU 2022
6
EJERCICIOS TALLER SHELL-SCRIPTS - UTIC/FTI/LASI/CAAGUAZU 2022
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
EJERCICIOS TALLER SHELL-SCRIPTS - UTIC/FTI/LASI/CAAGUAZU 2022
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.
8
EJERCICIOS TALLER SHELL-SCRIPTS - UTIC/FTI/LASI/CAAGUAZU 2022
for i in $tamanos
do
total=`expr total + $i`
done
totalkb=`expr total / 1024`
echo $totalkb
fi
9
EJERCICIOS TALLER SHELL-SCRIPTS - UTIC/FTI/LASI/CAAGUAZU 2022
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 julio, se
denominaría backup-07-07-2022.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
10