Professional Documents
Culture Documents
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 <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
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
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.
8
for i in $tamanos
do
total=`expr total + $i`
done
totalkb=`expr total / 1024`
echo $totalkb
fi
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
10