Article View: es.comp.os.linux.programacion
Article #7184Re: Ejercicios en BASH
From: Nobody
Date: Wed, 26 Mar 2003 18:57
Date: Wed, 26 Mar 2003 18:57
1211 lines
28007 bytes
28007 bytes
Creo que buscas enunciados. Solo te puedo enviar soluciones a enunciados, de
estas soluciones puedes sacar enunciados.
Son soluciones a preguntas unix y bash (a partir de practica 6)
----------------------------------------------------------------------------
------------------------------------------------
================= PRACTICA:1======================
1)
1.1: vi fich-1
i
<meto las 10 lineas>
1.2: con las flechas
1.3: a)mayusculas+G
b)1,shift+G --->
c)5,shift+G,$ --->numero linea ,shift + G
d)shift + la tecla
1.4: shift+E (2_ veces),shift + tecla
2)
2.1: la tecla inicio ,enter | shift + o
2.2: esc,3,shift + G
shift + e,b i, escribo palabra
2.3: esc,shift + a,escribo palabra
3)
3.1: esc,shift+tecla ,x (5 veces)
3.2: 2,shift +s,dd
3.3: shift + e (2 veces),shift + d
4)
4.1: y set nu
4.2: y set wm=80-65
Hay que dejar espacios para que funcione
5)
5.1: g/el/s//la/g
5.2: g/como/s///g esto borra la palabra
5.3: g/como/d
6)
6.1: sh,exit o ctrl+d /*se vuelve*/
6.2: !ls,enter /*se vuelve*/
7)
7.1: 3,shift+g 3,shift+y,7,shift+g,shift +p
7.2: 12,shift+g /*que es la penultima*/
o
dd(2 veces)
7.3: desde el 2_ fichero
:w>>fich-1
antes hemos grabado el actual
:x y editamos el segundo
vi fich2
/* otra forma */
:r fich2
7.4: x salgo
who >> fich-1
nota: 7.2 vas a la penultima y pulsas 2 veces DD,shift+p
============ PRACTICA:2 ===============
1)
1.1: ctrl+d
syslogin:uft22
password:enter
1.2: a)who
logname
b)id
1.3: a)uname
b)uname -r
c)uname -m
1.4: passwd
old password:-da
1
new password:da.
1.5: a)date
b)date '+ Son las %T del dia : %d%n del mes:%m del a?o: %y'
c)cal 1995
d)cal 05 2000
1.6: vi calendar
//introduzco frase con fecha mes dia calendar
saca las de hoy y ma?ana
1.7: finger -l (long)
1.8: lock num_minutos clave
2)
2.1: mail
2.2: //meterse en mail teniendo mensajes
a) '-'
b) '+' o n
c)
d) s num_mensaje buzon
2.3: who
2.4: mail nombreusuario < buzon
mail nombreusuario_de_otro_grupo < buzon
2.5: a) El sistema nos saca un mensaje de error
b) El sistema nos la devuelve como correo
c) cat dead.leter
2.6: a) mesg -n
b) who -T (El signo que sale delante de ttyxx nos indica si
el terminal en cuestion admite o no mensajes de
esta forma:
+ admite mensajes
- no los admite)
c)mesg -y
2.7: news
============PRACTICA 3=======================
1)
1.1: echo "como esta frase es bastante larga \n utilizo otra linea"
1.2: echo "texto de la primera \c"
echo "y de la segunda"
1.3: stty erase '^p' pasa la tecla de borrado a ctrl+p
2)
2.1: a)echo Mi grupo es `egrep $LOGNAME /etc/passwd|cut -f1 -d":"`"\c"
echo que se corresponde con el numero `egrep $LOGNAME
/etc/passwd|cut -f4 -d":"`
b)echo Mi directorio actual es: `pwd`
c)echo "Listado de las personas actualmente conectadas \n" `who`
d)echo Hay `who|wc -l` usuarios conectados en este momento
2.2:echo Mi identificativo es `egrep $LOGNAME /etc/passwd|cut -f3 -d":"`
2.3: a)basename `pwd`
b)dirname `pwd`
3)
3.1:
CAMINO ABSOLUTO:
EL nombre de camino absoluto (el nombre completo de un archivo
desde el directorio raiz hasta el nombre del archivo ,incluyendo
todos los nombres de los directorios intermedios ) para un archivo
comenzando por la raiz .
CAMINO RELATIVO:
El nombre del fichero incluyendo la referencia de los directorios
padre (..) e hijos (.) que hay desde el directorio actual hasta
donde se encuentra el fichero .
3.2: a).profile
b)HOME
3.3: for linea in 'ls '
do
if test -d $linea
then
echo $linea
fi
if test -f $linea
then
echo $linea
fi
done
3.4:
mkdir dirdos
mkdir dirdatos
mkdir diruno
cd diruno
mkdir dircuatro
mkdir dirtres
cat > f1
//luego se pulsa : ^D para salir y grabar
cd dirtres
cat > f2
cat > f3
cd ..
cd dircuatro
cat > f4
cd
3.5: cd $HOME
ls -r diruno
3.6: ls /dirdatos (camino absoluto)
ls ../../dirdatos (camino relativo)
3.7: a)cd diruno/dirtres
b)cd o cd $HOME
3.8: find /$HOME -name "d*" -print
�
ls $HOME d*
3.9:
-echo 'ls -l | cut -f5 -d" "'
Tama?o Es el numero que esta delante de la fecha
-echo 'ls -l | cut -f2 -d" "'
N� de enlaces es el numero que va delante del propietario
-Depende de como tenga los permisos el .profile podran
acceder solo el propietario, los del mismo grupo del
propietario, los demas usuarios, todos ellos o ninguno
-La letra que va delante de los permisos nos dice el ti-
po de archivo de que se trata
--r-------
El primer bloque de cuatro indica si es directorio o
fichero de teminal (c) y luego los permisos del propietario
,los tres siguientes los permisos para el grupo y los tres
ultimos el resto de usuarios.
3.10:
-echo 'ls -l | cut -f5 -d" " |tail +1
3.11: dircmp -d dirtres dircuatro
4)
4.1: cat camino/fichero1 camino/fichero2
4.2: a)cat camino/fichero1 camino/fichero2 | pg -20
b)cat camino/fichero1 camino/fichero2 | tail +3
c)cat camino/fichero1 camino/fichero2 | head -10
d)cat camino/fichero1 camino/fichero2 | tail -10
4.3: a)cp /bin/c* .
b)El propietario de /bin/c* es el root
El de ./c* no es nadie porque no se copian ya que no tenemos
permiso de lectura de los /bin/c*
4.4: rm ch*
4.5: a) ln -f datos infor
b) ls -l (el segundo campo)
c) Perdemos la informacion de datos ya que no podemos acceder
a traves de infor
4.6: cd $HOME/diruno
find -print|cpio -pd ../dirdos
4.7: wc -l f2 f3
4.8: cat f1 f3|wc -l
================= PRACTICA 4 ====================
1)
1.1:
cat nuevofich >> fichero (a?ado un fichero)
�
cat >> fichero (se a?ade lo que escriba a continuaci�n)
1.2:
a)cat f1 f2 2>errores
b)cat f1 f2 2>/dev/null
f1-> Si existe.
f2-> No existe este fichero.
1.3: who |wc -l >presentes
1.4: who |cut -c1-5,32-
1.5: who |cut -c1-5,10-20 | tee TTYS
2)
2.1: a) ls /usr/bin/c* � find /usr/bin -name "c*" -print
b) ls /usr/bin/[a-p]*
c) ls /usr/bin/[^d-p]* � find /usr/bin !-name [p-d]* -print
d) ls /usr/bin/???? � find /usr/bin -name "????" -print
2.2: ls -l $HOME | cut -c35-41,55-70
2.3: cat /etc/passwd | cut -f1,3,4 -d":">fich1
2.4: cat /etc/group |cut -f1,4 -d":"
2.5:
a) for i in 'cat agenda1'
do
pref= echo $i |cut -f3 -d":"
if test pref =91 then
echo $i
fi
done
OTRA FORMA
egrep :91: agenda1
b) for i in 'cat agenda1'
do
nombre= echo $i |cut -f1 -d":"
telefono= echo $i |cut -f4 -d":"
if test nombre ="A*" then
if [telefono="*00" then
echo $i
fi
fi
done
OTRA FORMA
egrep '^[Aa]&&$00' agenda1
c) grep -v :91: agenda1
d) egrep -v '^[Jj]uan|[Pp]edro' agenda1
e) egrep ':91:|:93:' agenda1
2.6:
3)
3.1: find $HOME -print
ls -l -R $HOME |pg
3.2: find $HOME -name "fich*" -print -exec cat {} \;
find $HOME -name "fich*" -print -ok cat {} \;
3.3: find / -name "p*" -type f -size +1 -print
3.4: find $HOME -type f -print
3.5: ls -lRi|egrep '^ [0-9]+ d'|cut -c1-5,60-
3.6: find . -perm 100 -exec ls -l {} \;>fich1;mail $LOGNAME < fich1;
rm fich1
3.7: find . -type f -ok rm {} \;
3.8: find $PATH -name *[core]* -print
4)
4.1: anterior=""
for linea in 'sort agenda1 -f'
do
actual=echo $linea|cut -f1 -d":"
if test anterior=actual then
else
echo $actual
fi
anterior=actual
done
4.2: sort -b: +1 agenda1
4.3:
sort -t: +1 -r agenda1 agenda2 > ageninv
4.4: sort -t: +1 -2 -u agenda1
4.5: sort -t: +1 /etc/passwd
4.6: sort -t: +2 -3 +0 -1 -u agenda1 agenda2 > telefonos
4.7: cmp fich1 fich2
4.8: cmp -l fich1 fich2
4.9: a)comm -2 fich1 fich2
b)comm -13 fich1 fich2
============== PRACTICA 5 ==============
1)
1.1: a)VARIABLE DE ENTORNO:
Variable que esta disponible a las ordenes como parte del
entorno que mantiene el shell.
VARIABLE DEL SHELL:
Definida dentro del shell para contener valores utilizados por
otros procesos durante una sesion de usuario.
b) Con export seria export nombre de variable
c) Se pueden visualizar anteponiendo a la variable $
d) set
1.2: a)PATH
Contiene una lista ordenada de los directorios en los que el
shell va a buscar un programa cuando se introduce un comando .
Reconocida.
b)PS2
Peticion de orden secudaria del shell .Reconocida.
c)IFS
Incluye el separador de campos por defecto.
d)ENV
Dice al ksh donde encontrar el archivo de entorno. Reconocida.
e)CDPATH
Una lista de directorios buscandos por la orden cd.Reconocida.
f)SHELL
Nombre del camino de su shell .Reconocida.
g)RANDOM
Contiene un entero aleatorio 0-32767.
h)PWD
Contiene el nombre del directorio de trabajo.
i)HOME
Nombre del camino de su directorio de presentacion o conexion.
Reconocida.
j)SECONDS
Tiempo transcurrido desde el comienzo de la sesion.
k)OLDPWD
Contiene el nombre del directorio inmediatamente anterior.
l)LOGNAME
Contiene el nombre de ususario.Reconocido
m)EDITOR
Contiene el nombre del fichero que es el editor que se usa por
defecto.
n)HISTFILE
Contiene el camino y el el nombre del fichero que sera usado
para almacenar el comando history.
o)PS1
Repeticion de orden primaria del shell.Reconocido.
p)TERM
Define su tipo de terminal para el editor vi y otras ordenes
orientadas a pantalla.Reconocido.
q)HISTSIZE
Dice a el shell ksh cuantas ordenes se alamcenan en el comando
history.
1.3: a)echo $HOME
b)echo $PWD
c)PS1=1>
1.4: a)Muestra el simbolo > (indica que la orden no se ha acabado ,
le falta algo a la orden)
b)PS2=2>
c)echo $PS2
1.5: a)echo $PS1
echo $PS2
b)Que vuelven a tener sus valores originales
c)Poniendolos en el .profile
1.6: a)NOMBRE=Pepe
APELLIDO1=Lopez
b)echo $NOMBRE
echo $APELLIDO1
c)Tiene 27 variables de ellas 11 de entorno.
1.7: a)17,11 (Por que las nuevas variables no se han exportado)
b)exit
1.8: a)NOMBRE=Perico
APELLIDO=De los Palotes
b)set salen 29
env salen 11
expast NOMBRE
set salen 29
env salen 13
1.9: a)DIRTRA=$HOME
b)cd /etc
c)cd $DIRTRA
1.10: a)GRUPO=`egrep $LOGNAME /etc/group|cut -f1 -d":"`
b)IDENTIDAD=`egrep $LOGNAME /etc/passwd`
c)TOTAL=`echo $IDENTIDAD:$GRUPO|cut -f3,4,8 -d":"`
1.11: a)NOMBRE[1]=Juanito
NOMBRE[2]=Banana
NOMBRE[3]=Tieso
b)echo ${NOMBRE[1]} ${NOMBRE[3]}
1.12: a)Son variables que solo tienen dos valores o activas o
desactivas.
b)noclobber:Impide sobreescribir un archivo existente cuando
se realiza la salida de una orden.
ignoreeof:Impide la salida accidental de la sesion cuando
se teclea crtl+d.
c)set -o noclobber
set -o ignoreeof
d)set +o noclobber
set +o ignoreeof
1.13: $0 Contiene el comando
$1 Contiene el argumento 1
$* Contiene todos los parametros
$# Presenta en numero de parametros posicionales
$? Presenta el valor devuleto por la ultima orden ejecutada .
Presenta:0 con exito, Distinto a 0 sin exito
$! Contiene el ID del ultimo proceso subordinado
$$ Contiene el ID del ultimo proceso no subordinado
1.14: a)echo $? (sale 0 o sea terminacion correcta)
b)
2)
2.1:
2.2: Las llaves se utilizan pra evitar confusiones cuando se quiere
a?adir una extension a la variable .En el ejemplo no hay ninguna
diferencia.
2.3: Devuelve la longitud del contenido de la variable PATH.
3)
3.1: alias datos="cat /etc/passwd |grep"
3.2: alias unidada="tar cufbk /dev/vfd0135ds18 18 1440"
Guarda los ficheros pasados como parametros en al unidad a:
3.3: alias
3.4: unalias datos
unalias unidada
4)
4.1: .profile
kshrc
4.2: En el .profile
a)clear
b)banner "hola `egrep $LOGNAME /etc/passwd|cut -f3 -d":"`"
c)mkdir $HOME/trabajo
cd $HOME/trabajo
d)umask 022
4.3: ..profile
5)
5.1: a)Editando mesactual
cal `date |cut -f2 -d" "`
b)ksh mesactual
. mesactual
5.2:
echo Numero de usuario es `grep $1 /etc/passwd|cut -f3 -d":"`
echo El grupo de usuario es `grep $1 /etc/group|cut -f1 -d":"`
echo El numero de grupo es `grep $1 /etc/passwd|cut -f4 -d":"`
5.3:
echo Numero de telefono `egrep -i "$1:$2 $3" telef|cut -f3 -d":"`
echo Direccion `egrep -i "$1:$2 $3" direc|cut -f3 -d":"`
5.4:
echo dame nombre: "/c"
read nombre
for linea in 'cat telef'
do
nom= echo $linea |cut -f1 -d":"
if test $nombre=$nom then
echo "$linea:'cut -f3 -d":" direc'>> resultado
fi
done
5.5: a)find . -type f -print en lfich
b)find . -type d -print en ldir
5.6:
CREAR=`grep $1 /etc/passwd |cut -f4 -d":"`
grep $CREAR /etc/passwd | cut -f3,6 -d":" >sugrupo
5.7:
while true
do
i='1'
if [$1!=""] then
echo los parametros recibidos son:
echo $*
echo El parametro $i es el nombre $1
i='expr i+1'
shift
else
exit
fi
done
5.8: En el fichero ejecutas:
$1
$2
$3
En el fichero cargar123
chmod 700 ejecuta
ejecuta logname pwd 'cal 11 2000'
5.9: En el fichero ejecutar:
$1
shift
$1
shift
$1
En el fichero cargar123
chmod 700 ejecuta
ejecuta logname pwd 'cal 11 2000'
5.10:
6)
6.1: history
6.2: $HISTSIZE
HISTSIZE=40
6.3: r -2
history
6.4: find -name "*txt" -exec cat {} \;
============= PRACTICA 6 ================
1)
## 1.1
## shell script p6_1-1.
## se utiliza el ksh.
## codificacion
# Comprobamos que se pase un parametro.
if [[ $# != 1 ]] then
# Presentamos el mensaje de error.
echo La llamada debe ser p6_1-1 argumento.
else
if [[ -f $1 ]] then
echo $1 es un fichero ordinario y:"\n"
sleep 3
for linea in 'ls'
do
aux=echo $linea
if [[$1 = aux]] then
if [[ -x $1 ]] then
echo es ejecutable."\n"
else
echo no es ejecutable."\n"
fi
if [[ -r $1 ]] then
echo es legible."\n"
else
echo no es legible."\n"
fi
if [[ -w $1 ]] then
echo es escribible."\n"
else
echo no es escribible."\n"
fi
if [[ -s $1 ]] then
echo su tama?o es mayor que cero."\n"
else
echo su tama?o es cero."\n"
fi
fi
done
else
echo $1 no es un fichero ordinario. "\n"
if [[ -d $1 ]] then
echo $1 es un subdirectorio."\n"
echo Sus entradas son:"\n"
sleep 3
cd /pwd/$1
# Listamos las entradas del subdirectorio.
ls|more
else
echo $1 no es un subdirectorio.
fi
fi
fi
## 1.2
## shell script visualiza.
## se utiliza el ksh.
##codificacion
#########################
# Comprobamos que se pase un parametro.
if (( $# != 1 )) then
# Presentamos el mensaje de error.
echo La llamada debe ser: "\c"
echo visualiza parametro_1
else
# Se busca si existe algun fichero llamado $1.
find / -name $1 -type f -print > et$$ 2> err$$
if [[ -s et$$ ]] then
# Si el tamano del fichero et$$ es mayor que cero,
# significa que al menos hay un fichero con ese nombre.
echo Se encontro algun fichero llamado $1
else
echo No se encontro ningun fichero llamado $1
fi
#Borramos los archivos temporales utilizados
rm err$$
rm et$$
fi
## 1.3
## shell script y.
## se utiliza el ksh.
## codificacion
# Los valores logicos son:
# - Verdadero: 0
# - Falso: !0
# Inicializamos la variable logica dos a falso.
# Esto es necesario, puesto que si la ejecucion del primer
# parametro es incorrecta, el enunciado nos prohibe ejecutar
# la segunda;
# y para realizar la comparacion la variable dos debe tener
# algun valor.
dos=!0
# Comprobamos que se pasen dos parametros.
if (( $# != 2 )) then
# Presentamos el mensaje de error.
echo La llamada debe ser: "\n"
echo y parametro_1 parametro_2 "\n"
echo Si en alguno de los parametros es necesario "\n"
echo poner espacios en blanco, no olvide dar el "\n"
echo parametro entre apostrofes (') o dobles comillas (").
else
echo Ejecutando..... $1 "\n"
sleep 3
$1
# Comprobamos el resultado de la ejecucion de $1
if (( $? != 0 )) then
uno=!0
else
uno=0
echo "\n"
echo Ejecutando..... $2 "\n"
sleep 3
$2
if (( $?==0 )) then
dos=0
fi
fi
# Para hacer comparaciones con las variables, es necesario
# comparar los contenidos de estas.
if (( $uno==0 && $dos==0 )) then
echo Resultado de la ejecucion: 0 "\n"
echo Ambas se ejecutaron con exito.
else
if (( $uno==!0 )) then
echo Resultado de la ejecucion: 1 "\n"
echo El parametro_1 se ejecuto incorrectamente.
else
if (( $uno==0 && $dos==!0 )) then
echo Resultado de la ejecucion: 1 "\n"
echo El parametro_2 se ejecuto incorrectamente.
fi
fi
fi
fi
## 1.4
## shell script o.
## se utiliza el ksh.
## codificacion
# Comprobamos que se pasen dos parametros.
if (( $# != 2 )) then
# Presentamos el mensaje de error.
echo La llamada debe ser: "\n"
echo o parametro_1 parametro_2 "\n"
echo Si en alguno de los parametros es necesario "\n"
echo poner espacios en blanco, no olvide dar el "\n"
echo par�metro entre ap�strofes (') o dobles comillas (").
else
echo Ejecutando..... $1 "\n"
sleep 3
$1
if (( $?==0 )) then
uno=0
else
uno=!0
fi
echo "\n"
echo Ejecutando..... $2 "\n"
sleep 3
$2
if (( $?==0 )) then
dos=0
else
dos=!0
fi
if (( $uno==0 && $dos==0 )) then
echo Resultado de la ejecucion: 0 "\n"
echo Ambas se ejecutaron con exito.
else
if (( $uno==!0 && $dos==0 )) then
echo Resultado de la ejecucion: 1 "\n"
echo El parametro_1 se ejecuto incorrectamente.
else
if (( $uno==0 && $dos==!0 )) then
echo Resultado de la ejecucion: 1 "\n"
echo El parametro_2 se ejecuto incorrectamente.
else
if (( $uno==!0 && $dos==!0 )) then
echo Resultado de la ejecucion: 1 "\n"
echo Ambas se ejecutaron incorrectamente.
fi
fi
fi
fi
## 1.5
## shell script copia.
## se utiliza el ksh.
## codificacion
if (( $# != 2 )) then
clear
echo La llamada debe ser: "\n"
echo $0 argumento_1 argumento_2
sleep 3
exit 2
fi
if [[ -f $1 ]] then
true=0
else
echo $1 no existe o no es un archivo ordinario. "\n"
sleep 3
exit
fi
find . -name $2 -print > tmp$$
if [[ -s tmp$$ ]] then
clear
echo Existe un identificador en el directorio actual,"\n"
echo con el mismo nombre.
sleep 3
exit
fi
if (( $true==0 )) then
clear
echo Copiando..... $1 sobre $2
sleep 3
cp $1 $2
echo Copia finalizada.
fi
rm tmp$$
## 2.1
## shell script organiza.
## se utiliza el ksh.
## codificacion
# Inicializamos las variables que vamos a utilizar.
c=0
f=0
p=0
for i
# Guardamos en la variable i el archivo.
in `ls -R $HOME`
do
if [[ -f $i ]] then
case $i in
*.c) if (( $c==0 )) then
echo Creando..... prog_c "\n"
sleep 1
mkdir prog_c
fi
(( c=c+1 ))
mv $i $HOME/prog_c
;;
*.f) if (( $f==0 )) then
echo Creando..... prog_for "\n"
sleep 1
mkdir prog_for
fi
(( f=f+1 ))
mv $i $HOME/prog_for
;;
*.p) if (( $p==0 )) then
echo Creando..... prog_pas "\n"
sleep 1
mkdir prog_pas
fi
(( p=p+1 ))
mv $i $HOME/prog_pas
;;
esac
fi
done
if (( $c==0 )) then
echo No existen archivos con extension c, por lo tanto
echo no se ha creado el subdirectorio prog_c. "\n"
sleep 2
fi
if (( $f==0 )) then
echo No existen archivos con extension f, por lo tanto
echo no se ha creado el subdirectorio prog_for. "\n"
sleep 2
fi
if (( $p==0 )) then
echo No existen archivos con extension p, por lo tanto
echo no se ha creado el subdirectorio prog_pas. "\n"
sleep 2
fi
## 4.1
## shell script leer.
## se utiliza el ksh.
## codificacion
echo Introduzca valor o cadena:
read CAD
while [ $CAD != fin ]
do
echo $CAD >> $HOME/tmp$$
read CAD
done
if [[ -s tmp$$ ]] then
echo Datos introducidos: "\n"
cat tmp$$|more
fi
rm tmp$$
## 4.2
## shell script menu.
## se utiliza el ksh.
## codificacion
if (( $#==0 )) then
clear
echo No existen argumentos
sleep 3
exit 2
fi
while [ -n "$1" ]
do
echo 1.- Comprobar si el fichero existe en su directorio actual.
echo 2.- Mostrar su nombre y tama?o. "\n"
echo -n Elija opcion:
read RESP
case $RESP in
1) if [[ -a $1 ]] then
echo El fichero existe.
else
echo El fichero NO existe.
fi
sleep 3
shift
;;
2) clear
echo Tama?o y nombre: "\n"
ls -l $1|cut -c34-41,55-70
sleep 3
shift
;;
esac
if [[ -z "$1" ]] then
clear
echo No existen mas argumentos
exit
fi
done
## 4.3
## shell script enteros.
## se utiliza el ksh.
## codificacion
clear
i=1
echo NUMERO "\t" CUADRADO "\t" CUBO "\n"
while (( i<=20 ))
do
(( CUADRADO=i*i ))
(( CUBO=i*i*i ))
echo $i "\t" $CUADRADO "\t" $CUBO "\n"
(( i=i+1 ))
sleep 1
done
## 4.4
## shell script borrar.
## se utiliza el ksh.
## codificacion
if (( $#==0 )) then
clear
echo Uso: borrar ficheros
exit 2
fi
clear
# Guardamos en el fichero "mios" todos los nombres de los archivos
# de mi propiedad incluidos los ocultos.
ls -l -a | grep $LOGNAME | cut -c55-70 > mios
# Mientras el contenido del primer parametro posicional sea
# distinto de cadena vacia se ejecuta el bucle.
while [ -n "$1" ]
do
# Comprobamos que el fichero exista.
if [[ -a $1 ]] then
# Se mira si es un directorio.
if [[ -d $1 ]] then
echo $1 es un directorio."\n"
echo No se borrara.
sleep 1
else
# Se busca el nombre del fichero en "mios" para ver si es de
# mi propiedad.
grep $1 mios > /dev/null
# Si lo encuentra lo borra.
if (( $?==0 )) then
echo Borrando..... $1 "\n"
sleep 1
rm $1
else
echo $1 no es de su propiedad. "\n"
fi
fi
else
echo $1 no existe.
sleep 1
fi
shift
done
echo "\n"
echo No hay mas argumentos
## 5.1
## shell script elimina.
## se utiliza el ksh.
## codificacion
if (( $#==0 )) then
clear
echo Uso: elimina inicial
exit 2
fi
for i
in `ls -l | cut -c55-70`
do
if [[ -f $i ]] then
aux=`echo $i | cut -c1`
if [[ $aux=$1 ]] then
echo $i >> borrados
rm $i > /dev/null
fi
fi
done
if [[ -s borrados ]] then
echo Ficheros borrados del directorio actual: "\n"
sleep 2
cat borrados
else
echo No existen ficheros que comiencen por $1
fi
## 5.3
## shell script cuadrados.
## se utiliza el ksh.
## codificacion
if (( $#==0 )) then
clear
echo Uso: cuadrados numeros "\n"
exit 2
fi
for i
do
(( CUADRADO=i*i ))
echo El cuadrado de $1 es: $CUADRADO
sleep 1
done
## 5.5
## shell script contenido.
## se utiliza el ksh.
## codificacion
echo Informacion de los ficheros ordinarios de $PWD: "\n"
for i
in `ls -R $PWD`
do
if [[ -f $i ]] then
nl=`cat $i | wc -l`
echo Nombre: $i "\n"
echo contiene: $nl lineas.
sleep 1
fi
done
============== PRACTICA 7 =================
1)
1.1: ps -f
1.2: ps -l |cut -f4,5,7,815 -d" "
(En el UNIX SITEMA 5 (sco) no funciona porque los delimitadores
son tres espacios y no es el tab.)
1.3: alias prio=`ps -u uest22 -l cut -f4,5,7,8,13,15 -d" "
1.4: En pantalla es el mismo resultado pero en el fichero.
En la primera opcion :
La orden tee coje como entrada el resultado de
todo el contenido del parentesis.
En la segunda:
Solo toma como entrada el resultado de la orden wc -l
1.5: a)Tomo el camino anterior (absoluta) hasta el padre del directorio
actual pero no el actual .
b)Las llaves no pueden estar en la misma linea sale el prompt
secundario(>).
c)Igual que la primera cuestion.
1.6: a)Matar al ultimo proceso actual.
b)No.
c)kill -9 $$
1.7:
2)
2.1: vi shell_71
escribo las dos ordenes
chmod 777 shell_71
shell_71&
2.2: nice -5 shell_71&
nice -10 shell_71&
2.3: jobs salen los procesos
stop % numero de procesos
2.4: a)(sleep 50;sleep 55)&
2.5:
2.6: Tiempo Real :0m 15.85s
Para calcular el tiempo :
time find ....
time find <igual> >miprofile 2>&
Tiempo Real: 0m 16.27s
2.7: shell_72
ORD=`find . -type f 2 > /dev/null|wc -l`
DIR=`find . -type d 2 > /dev/null|wc -l`
Lo llamaria shell_72 & despues de hacerlo ejecutable con chmod
"El Jesuita" <billgates@msn.com> escribi� en el mensaje
news:b5s54d$2c2abf$1@ID-162186.news.dfncis.de...
> Muy buenos d�as a todos:
>
> �Alguien me podr�a indicar d�nde puedo encontrar ejercicios de
programaci�n
> en BASH?
>
> Gracias de antemano.
> --
> El Jesuita sin vocaci�n
> fmarcelo(ARROBA)airtel.PUNTO.net
Technical Details
Message-ID:
<b5ssvs$fkr$1@nsnmpen2-gest.nuria.telefonica-data.net>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!headwall.stanford.edu!fu-berlin.de!nsnmpen1-lo.nuria.telefonica-data.net!nsnmpen2-lo.nuria.telefonica-data.net!not-for-mailReferences:
<b5s54d$2c2abf$1@ID-162186.news.dfncis.de>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,17d093b30e91cb30 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2003-03-26 10:53:55 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!headwall.stanford.edu!fu-berlin.de!nsnmpen1-lo.nuria.telefonica-data.net!nsnmpen2-lo.nuria.telefonica-data.net!not-for-mail From: "Nobody" <pirrooo@pirrooo.com> Newsgroups: es.comp.os.linux.programacion Subject: Re: Ejercicios en BASH Date: Wed, 26 Mar 2003 19:57:56 +0100 Organization: Telefonica Data Espagna Lines: 1213 Message-ID: <b5ssvs$fkr$1@nsnmpen2-gest.nuria.telefonica-data.net> References: <b5s54d$2c2abf$1@ID-162186.news.dfncis.de> NNTP-Posting-Host: 217-126-132-175.uc.nombres.ttd.es X-Trace: nsnmpen2-gest.nuria.telefonica-data.net 1048704831 16027 217.126.132.175 (26 Mar 2003 18:53:51 GMT) X-Complaints-To: usenet@nsnmpen2-gest.nuria.telefonica-data.net NNTP-Posting-Date: Wed, 26 Mar 2003 18:53:51 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2720.3000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000