🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #7184

Re: Ejercicios en BASH

#7184
From: Nobody
Date: Wed, 26 Mar 2003 18:57
1211 lines
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-mail
References: <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