Recopilación de los ejercicios resueltos en 06-07
2 participantes
Página 1 de 1.
Recopilación de los ejercicios resueltos en 06-07
Entrega 5.2:
- Código:
1.-)
#!/bin/bash
if test -d $1
then
ls -l $1|egrep '^l'
else
cat $1
fi
2.-)
{FOR}
#!/bin/bash
for i in $1 $2 $3 $4 $5;
do
echo -n $i
done
{WHILE}
#!/bin/bash
min=1
while (($min<6))
do
echo $min
let min=$min+1
done
3.-)
for i in $*;do
test $i
let sum=sum+$i
done
echo $sum
4.-)
tot=$*
tot=${tot// /+}
sum=0
for arg in $*
do
((sum=$sum+$arg))
done
echo $tot=$sum
5.-)
#!/bin/bash
for i in $*;do
if test -f $i
then
echo $i" es un fichero"
elif test -d $i
then
echo $i" es un directorio"
fi
done
6.-)
or arch in `ls *.html | cut -d "." -f1`
do
`mv $arch.html $arch.xhtml`
done
echo 'Archivos .html renombrados a .xhtlm'
7.-)
cont=1
while read LINEA
do
echo $cont-$LINEA
((cont=$cont+1))
done < /etc/passwd
Última edición por el Mar 16 Oct 2007, 19:57, editado 1 vez
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Recopilación de los ejercicios resueltos en 06-07
Ejercicio 5.3
- Código:
1)
#!/bin/bash
while read LINEA
do
Lin=`echo $LINEA | egrep "^.*:.*$"`
if test ! $Lin
then
continue
fi
final=`echo $Lin | cut -d: -f7`
if test $final == "/bin/bash"
then
continue
fi
echo $Lin|cut -d: -f 1
done
2)
a) Break sale del bucle y continue pasa a la siguente pasada.
Cuando hay varios bucles anidados: Break n sale hasta el bucle n. Es decir si tienes un codigo como el siguiente:
for
for
for
break 2
done
done
viene aqui
done
Al llegar al break 2 iria a la linea viene aqui.
Continue n pasa a la siguente pasada del bucle anidado n
for
for
sigue aqui en la siguiente pasada
for
continue 2
done
done
done
Al llegar a continue 2 vuelve al segundo bucle, comenzando la siguiente pasada.
b)
#!/bin/bash
cat list-usu | grep ":" | grep -v "^.*/bin/bash$"|cut -d: -f 1
Última edición por el Mar 16 Oct 2007, 20:06, editado 1 vez
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Recopilación de los ejercicios resueltos en 06-07
Entrega 5.4:
- Código:
1)
#!/bin/bash
function test_letras()
{
local lin
lin=`echo $1 | egrep "^[a-zA-Z]+$"`
if test ! $lin
then
return 0
else
return 1
fi
}
echo -n "Introduce el nombre:"
read NOMBRE
echo -n "Introduce el primer apellido:"
read APELLIDO1
echo -n "Introduce el segundo apellido:"
read APELLIDO2
test_letras $NOMBRE
res=$?
if test $res -eq 0
then
echo "El nombre contiene caracteres no validos"
fi
test_letras $APELLIDO1
res=$?
if test $res -eq 0
then
echo "El primer apellido contiene caracteres no validos"
fi
test_letras $APELLIDO2
res=$?
if test $res -eq 0
then
echo "El segundo apellido contiene caracteres no validos"
fi
2)
2)
#!/bin/bash
function test_letras()
{
local lin
lin=`echo $1 | egrep "^[a-zA-Z]+$"`
if test ! $lin
then
return 0
else
return 1
fi
}
function test_may()
{
local lin
lin=`echo $1 |egrep "^[:upper:]+$"`
if test ! $lin
then
return 1
else
return 0
fi
}
echo -n "Introduce el nombre:"
read NOMBRE
echo -n "Introduce el primer apellido:"
read APELLIDO1
echo -n "Introduce el segundo apellido:"
read APELLIDO2
test_letras $NOMBRE
res=$?
if test $res -eq 0
then
echo "El nombre contiene caracteres no validos"
fi
test_letras $APELLIDO1
res=$?
if test $res -eq 0
then
echo "El primer apellido contiene caracteres no validos"
fi
test_letras $APELLIDO2
res=$?
if test $res -eq 0
then
echo "El segundo apellido contiene caracteres no validos"
fi
test_may $NOMBRE
res=$?
if test $res -eq 0
then
echo "El nombre contine caracteres en minusculas"
fi
test_may $APELLIDO1
res=$?
if test $res -eq 0
then
echo "El primer apellido contine caracteres en minusculas"
fi
test_may $APELLIDO2
res=$?
if test $res -eq 0
then
echo "El segundo apellido contine caracteres en minusculas"
fi
3)
#!/bin/bash
function test_letras()
{
local lin
lin=`echo $1 | egrep "^[a-zA-Z]+$"`
if test ! $lin
then
return 0
else
return 1
fi
}
function test_may()
{
local lin
lin=`echo $1 |egrep "^[^:upper:]+$"`
if test ! $lin
then
return 0
else
return 1
fi
}
function a_may ()
{
for arg in $*
do
echo `echo $arg | tr [:lower:] [:upper:]`
done
}
echo -n "Introduce el nombre:"
read NOMBRE
echo -n "Introduce el primer apellido:"
read APELLIDO1
echo -n "Introduce el segundo apellido:"
read APELLIDO2
test_letras $NOMBRE
res=$?
if test $res -eq 0
then
echo "El nombre contiene caracteres no validos"
fi
test_letras $APELLIDO1
res=$?
if test $res -eq 0
then
echo "El primer apellido contiene caracteres no validos"
fi
test_letras $APELLIDO2
res=$?
if test $res -eq 0
then
echo "El segundo apellido contiene caracteres no validos"
fi
test_may $NOMBRE
res=$?
if test $res -eq 0
then
NOMBRE=`a_may $NOMBRE`
echo "Nombre cambiado a mayusculas: $NOMBRE"
fi
test_may $APELLIDO1
res=$?
if test $res -eq 0
then
APELLIDO1=`a_may $APELLIDO1`
echo "Primer apellido cambiado a mayusculas: $Apellido1"
fi
test_may $APELLIDO2
res=$?
if test $res -eq 0
then
APELLIDO2=`a_may $APELLIDO2`
echo "Segundo apellido cambiado a mayusculas: $APELLIDO2"
fi
4)
#!/bin/bash
function test_letras()
{
local lin
lin=`echo $1 | egrep "^[a-zA-Z]+$"`
if test ! $lin
then
return 0
else
return 1
fi
}
function test_may()
{
local lin
lin=`echo $1 |egrep "^[^:upper:]+$"`
if test ! $lin
then
return 0
else
return 1
fi
}
function a_may ()
{
for arg in $*
do
echo `echo $arg | tr [:lower:] [:upper:]`
done
}
function long_cad ()
{
local lin
lin=`echo $1 | wc -m`
local num_max
((num_max=$2+2))
if test $lin -lt $num_max
then
return 1
else
return 0
fi
}
MAX=10
echo -n "Introduce el nombre:"
read NOMBRE
long_cad $NOMBRE $MAX
num=$?
while test $num -eq 0
do
echo -n "El nombre puede tener como maximo $MAX letras. Vuelva a introducirlo:"
read NOMBRE
long_cad $NOMBRE $MAX
num=$?
done
echo -n "Introduce el primer apellido:"
read APELLIDO1
long_cad $APELLIDO1 $MAX
num=$?
while test $num -eq 0
do
echo -n "Los apellidos pueden tener como maximo $MAX letras. Vuelva a introducirlo:"
read APELLIDO1
long_cad $APELLIDO1 $MAX
num=$?
done
echo -n "Introduce el segundo apellido:"
read APELLIDO2
long_cad $APELLIDO2 $MAX
num=$?
while test $num -eq 0
do
echo -n "Los apellidos pueden tener como maximo $MAX letras. Vuelva a introducirlo:"
read APELLIDO2
long_cad $APELLIDO2 $MAX
num=$?
done
test_letras $NOMBRE
res=$?
if test $res -eq 0
then
echo "El nombre contiene caracteres no validos"
fi
test_letras $APELLIDO1
res=$?
if test $res -eq 0
then
echo "El primer apellido contiene caracteres no validos"
fi
test_letras $APELLIDO2
res=$?
if test $res -eq 0
then
echo "El segundo apellido contiene caracteres no validos"
fi
test_may $NOMBRE
res=$?
if test $res -eq 0
then
NOMBRE=`a_may $NOMBRE`
echo "Nombre cambiado a mayusculas: $NOMBRE"
fi
test_may $APELLIDO1
res=$?
if test $res -eq 0
then
APELLIDO1=`a_may $APELLIDO1`
echo "Primer apellido cambiado a mayusculas: $APELLIDO1"
fi
test_may $APELLIDO2
res=$?
if test $res -eq 0
then
APELLIDO2=`a_may $APELLIDO2`
echo "Segundo apellido cambiado a mayusculas: $APELLIDO2"
fi
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Recopilación de los ejercicios resueltos en 06-07
Entrega 5-6:
- Código:
1)
history | awk '{printf $2 "\n" }' | sort | uniq -c | sort -nr | head -5
2)
#!/bin/bash
while read linea
do
IP=`echo "$linea" | egrep '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])){3}' | cut -f1`
if [ $IP ]
then
ping -c1 $IP
fi
done < /etc/hosts
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Recopilación de los ejercicios resueltos en 06-07
Practica 1:
- Código:
practica 1:
1
ls -l leame
- archivo
d directorio
c dispositivo de tipo caracter
b dispositivo de tipo bloque
p pipe con nombre
l enlace simbólico a un directorio
138
todos los usuarios, ya que tiene el permiso de lectura (r) para el ususario
grupo y para otros
solo el propio nombre del archivo (leame)
2
chmod -R ug+rw /homeluserlejec
chmod -R o+r /homeluserlejec
chmod -R 664
3
ls -Fa
* archivos ocultos
/ directorios
4
usuario, ya que el grupo y otros no tienen permisos de escritura
5
archivo: -rw-r--r--
directorio: wrxr-xr-x
6
Son un archivo que almacena el nombre de otro archivo, funciona como un
puntero a ese archivo.
wrxwrxwrx
Si
7
find ~/*[^:lower:]*.txt
salida:
/home/infos/luihija/W
/home/infos/luihija/arcHprueba1
/home/infos/luihija/WC
/home/infos/luihija/Desktop
/home/infos/luihija/Desktop/Autostart
find ~/[a-z][a-z][0-9][0-9]*.txt -mtime -5
fing ~/ -size +100b
8
find ~/ -exec ls -l '{}' \;
find logs/ -type f -exec rm -i '{}' \;
find -name "admin.log.[0-9][0-9][0-9][0-9]" -mtime -7 -exec rm -i '{}' \;
9
Lista los archivos de la carpeta /apps/audit que tenga todos los bits
de permiso activos ara el fichero paea el usuario y les añade el
permiso de escritura para los otros usuarios
xargs ejecuta el comando que sea el primer argumento con cada archivo que seciba por pipeline
10
ls ~/[io]*
ls log.[0-9]*
ls log.[!0-9]*
ls [A-Z]*
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Recopilación de los ejercicios resueltos en 06-07
Practica 2:
- Código:
Practica 2
1)
a. /^USER$/
b. /tty$/
c. /[.]$/
d. ll | grep ^d..x..x..x
e. ll | grep ^[^l]
f. /.+[0]/
g. /^$/
h. /.+$/
i. /^.{6}$/
j. /\w/
k. /[:lower:]+/
l. /^[^0-9^$]*$/
m. /[^[:alnum:]]/
n. /^.$/
o. /^[.][:digit:][:digit:].*$/
p. /(0?[1-9]|[12][0-9]|3[01])-(0?[1-9]|1[012])-[0-9]{4}/
q. /([01][0-9][0-9]|2[0-4][0-9]|25[0-5])[.]([01][0-9][0-9]|2[0-4][0-9]|25[0-5])[.]([01][0-9][0-9]|2[0-4][0-9]|25[0-5])/
2) /[:digit:]{4}XX[:digit:]{4}/
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Recopilación de los ejercicios resueltos en 06-07
Practica 3:
- Código:
Practica 3
01) egrep -c '48' datos.f
02) egrep -n '48' datos.f
03) egrep -v '48' datos.f
04) egrep -w '48' datos.f
05) egrep -i 'sept' datos.f
06) egrep '483|484' datos.f
07) egrep -v '^48.*' datos.f
08 ) egrep -i '483[ ]*sept' datos.f
09) egrep '\b\b\b\b\bK...D' datos.f
10) egrep '\b\b5..(1996|1998)' datos.f
11) a: egrep '4{2}' datos.f
b: egrep '4[^4]+4' datos.f
12) egrep '^(219|216)' datos.f
13) egrep -x '|[ ]*' datos.f
14) egrep '[.]' datos.f
15) egrep '(([01][0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}([01][0-9][0-9]|2[0-4][0-9]|25[0-5])' hosts
16) egrep '\b\b\b[[:upper:]]*\b' datos.f
17) ll ~ | egrep '^d.*$'
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Recopilación de los ejercicios resueltos en 06-07
Practica 4
- Código:
01) sort -t ":" -k 5 uf1
02) sort -o uf1ap_ord -t ":" -k 5 uf1
03) sort -o uf1num_ord -t ":" -k 3 uf1ap_ord
04) sort -o uf1num_ord -t ":" -k 5 uf1num_ord
05) sort -o uape_ord -t ":" -k 5 uf1 uf2
06) head -n 2 uape_ord
07) tail -n 2 uape_ord
08 ) uniq uape_ord | head -n 2
09) uniq uape_ord | cut -d ":" -f 5
10) uniq uape_ord | cut -d ":" -f 5 | cut -d "," -f 2 | cut -d "-" -f 1 > n_usu
11) uniq uape_ord | cut -d ":" -f 5 | cut -d " " -f 1 > 1a_usu
12) paste n_usu 1a_usu > na_usu
13) egrep "^(483|484)" datos.f | cut -d " " -f 7
14) egrep -v "^48" datos.f | cut -d " " -f 7
15) egrep -i "^483 sept" datos.f | cut -d " " -f 7
16) cut -d " " -f 6,7 datos.f | egrep '^K...D' | cut -d " " -f 2
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Recopilación de los ejercicios resueltos en 06-07
Practica 5:
- Código:
1) egrep -v '^[ ]*$' datos.f | awk 'BEGIN {printf "\nMes\tVentas\n\n---------------\n";}
{printf "%s\t%d\n",$2,$7;}
END{printf "----\nFin de informe\n";}' -
2) egrep -v '^[ ]*$' datos.f | awk 'BEGIN {printf "\nMes\tVentas\n\n---------------\n";}
/DIC/{printf "%s\t%d\n",$2,$7;}
END{printf "----\nFin de informe\n";}' -
3) egrep -v '^[ ]*$' datos.f | awk 'BEGIN {printf "\nAlmacenes con menos de 100 ventas\n";}
($7<100){printf "%s\t%d\n",$3,$7;}
END{printf "----\nFin de informe\n";}' -
4) egrep -v '^[ ]*$' datos.f | awk '/NOV|DIC/{cont+=$7;}
END{printf"Total de ventas en Noviembre y Dicciembre:%d\n",cont;}' cont=0 -
5) sort -t " " -k 2 -M datos.f | egrep -v "^[ ]*$" | awk '
BEGIN{sumaMes=0;sumaTot=0;printf "\nMes\tTotal\n-----------\n\n";}
{sumaMes+=$7;sumaTot+=$7; if (mesAnterior!="" &&
mesAnterior!=toupper($2)) {printf
"%s\t%d\n",mesAnterior,sumaMes-$7;sumaMes=$7} mesAnterior=toupper($2);}
END{printf "%s\t%d\n",mesAnterior,sumaMes;printf "··········\nTotal
general: %d\n",sumaTot;}' -
Primero ordeno por meses (sort -M) los meses, con el egrep le
quito las lineas vacias. Con el awk Muestro el informe: primero la
cabecera e inicializacion de variables en el BEGIN, despues los
calculos, sumo el total y el de cada mes, y si el mesAnterior no esta
en blanco (para que no imprima un 0 en el primer caso) y es diferente
al mes actual imprimimos el total de ese mes (se le resto la venta
actual ya que seria del mes siguiente) y se pone la suma del mes a 0.
Para terminar en el END imprimimos el ultimo mes (que al no tener uno
detras diferente no se imprime), y la linea de pie con el total.
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Recopilación de los ejercicios resueltos en 06-07
Practica 6
- Código:
01)sed -n '/[.]$/d'
02)sed -n '/abcd/d'
03)sed -n 's/[ ]\{2,\}/ /g'
04)sed -n 's/^[ ]\+//g'
05)sed -n 's/[.][ ]\{2,\}/ /g'
06)sed -n '/^[ ]*$/d'
07)sed -n 's/^.//g'
08)sed -n 's/...COL//g'
09)sed -n 's/[/]//'
10)sed -n 's/[ ]\+/\t/g'
11)sed -n 's/^\t//g'
12)sed -n 's/\t//g'
Sed como filtro:
1)sed '/^[^j]/d' /etc/password | head -n 2
2)sed '/[0-9]\{3,\}/d' etc/passwd | head -n 2
(Seria mejor asegurarnos de que solo compruebe el campo dixo, y no toda
la linea, pero como no tenemos acceso a esos archivos, no puedo ver ni
los separadores, ni en que columna esta cada campo)
awk:
1) grep '^...0[1-4]' contabilidad.dat | sed 's/^...//g' | sed
's/-[0-9]\{4\}|/|/g' | sed 's/|/ /g' | sort -t " " -k 1 -n |awk
'BEGIN{sumaGas=0;sumaAgua=0;sumaLuz=0;sumaGastos=0;printf
"\nMes\tGas\tAgua\tLuz\tTotalGastos\n-------------------------------------------\n\n";}
{if (mesAnterior!=0 && mesAnterior!=$1)
{printf "%d\t%d\t%d\t%d\t%d\n",mesAnterior,sumaGas,sumaAgua,sumaLuz,sumaGastos;sumaGas=0;sumaLuz=0;sumaAgua=0;sumaGastos=0}
mesAnterior=$1;
if ($2=="AGUA") {sumaAgua-=$3;}if ($2=="GAS") {sumaGas-=$3;} if ($2=="LUZ"){sumaLuz-=$3;} if ($3<0){sumaGastos-=$3;}}
END {printf "%d\t%d\t%d\t%d\t%d\n",mesAnterior,sumaGas,sumaAgua,sumaLuz,sumaGastos}' -
con la primera parte escojo los meses que quiero, los ordeno y los
pongo en un formato en el que es mas facil hacer los calculos. la
primera parte da un listado como el siguiente:
1 - 96
01 GAS -34175
01 INGRESO 141200
01 LUZ -15797
02 LUZ -12475
02 MENS -96092
03 INGRESO 101300
03 MENS -96092
04 AGUA -15859
04 INGRESO 134000
04 MENS -96092
Con el awk hacemos lo calculos e imprimimos en un determinado formato, la salida seria la siguiente:
Mes Gas Agua Luz TotalGastos
-------------------------------------------
1 34175 0 15797 49972
2 0 0 12475 108567
3 0 0 0 96092
4 0 15859 0 111951
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Recopilación de los ejercicios resueltos en 06-07
Practica Scripts 1:
- Código:
1)
echo $1
echo $2
echo $3
2)
echo $#
3)
echo $*
4) Lo he hecho de dos maneras:
a)
tot=$*
tot=${tot// /+}
echo $tot
b)
for a in $@
do
tot=$tot$a+
done
echo $tot
5)
if test $1 = $2
then
echo 'IGUALES'
else
echo 'DISTINTO'
fi
6)
if test -f $1
then
echo 'Es un archivo'
else
echo 'No es un fichero'
fi
7)
if test -f $1
then
echo 'Es un archivo'
else
echo 'Es un directorio'
fi
if test -r $1
then
echo 'Tiene permiso de lectura'
fi
if test -w $1
then
echo 'Tiene permiso de escritura'
fi
if test -x $1
then
echo 'Tiene permiso de ejecucion'
fi
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Recopilación de los ejercicios resueltos en 06-07
Joder DjCloud, como aprovecha para subir mensajes, xD
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.