Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Podéis ayudarme con una orden de Linux

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Sab Abr 28, 2007 8:19 am
ale9gaditano
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Abr 2007
Mensajes: 3
Podéis ayudarme con una orden de Linux Responder citando

Hola a todos, en la facultad me han pedido que haga una orden de Linux (estamos usando el SUSE) en Perl, pero estoy bastante escaso de Perl.

Me gustaría saber si alguna persona que maneje bien Perl y al cual le sea fácil la orden que me han pedido, me lo pueda hacer. La orden y su función es la siguiente:

Cita:
Enunciado:

Deseamos realizar un programa en PERL que nos permita manejar el contenido del fichero fstab.

Este se llamará adminfstab y tendrá el siguiente formato:
adminfstab –l [ pmontaje | dispositivo [-d]] | -a | -b pmontaje | -t lista_fs... donde:
-l Mostrará un listado de las entradas del fichero fstab, ordenado por el primer campo y numerado.

Esta opción puede estar acompañada de un literal que nos indique el punto de montaje o el nombre de dispositivo (o partición) a mostrar. Si no se indica ninguno, se mostraran todas las entradas del fichero fstab.

Si además la acompañamos de la opción –d, en lugar de mostrar los campos del fichero fstab, nos mostrará el árbol de directorios y ficheros del punto de montaje o directorio.

-a Añadirá una nueva línea al fichero. Para ello el programa pedirá los campos necesarios.
-b Borrará la entrada del fichero fstab correspondiente al punto de montaje pmontaje
-t Listará por pantalla los puntos de montaje que tienen como sistema de ficheros la lista que acompaña a esta opción.
Si el programa fuera llamado con una sintaxis incorrecta o sin indicar ninguna opción, este mostrará la sintaxis correcta del programa y volverá al shell del sistema.

Ejemplos de llamadas al programa:
adminfstab –l /dev/hda1
adminfstab –l /dev/hda1 -d
adminfstab –l /
adminfstab –a
adminfstab –b /dev/hdb2
adminfstab –t ext2 ext3
adminfstab –t vfat

Preparación del sistema:

Para poder realizar este ejercicio sin que le afecte a la estructura de su sistema es conveniente prepararlo previamente. Para ello siga las siguientes instrucciones:
1. En su directorio de trabajo cree el directorio etc. El programa debe residir en
este directorio.
2. Copie el fichero /etc/fstab al directorio etc creado anteriormente.
Realice el programa teniendo en cuenta esta estructura y nunca sobre los ficheros y directorios originales.

Esta utilidad podrá ser ejecutada por cualquier usuario, excepto la opción –a, que sólo la podrá ejecutar el administrador o root, para ello y como una posible forma de averiguar que usuario está ejecutando el programa, puede buscar información sobre las variables del sistema $< y $>. Usted deberá controlar los permisos sobre ficheros y directorios. Así como controlar los posibles errores de apertura y cierre de ficheros y directorios que se puedan producir.

NO PODRÁ EJECUTAR NINGUNA ORDEN DEL SISTEMA DESDE DENTRO
DEL PROGRAMA, ES DECIR, NO PODRÁ UTILIZAR LA ORDEN system.


Aparte tengo la manera de evaluar el enunciado, si alguien me lo pide que me ponga el correo y se lo mando.

Muchas gracias por todo.

Saludos
Mensaje Sab Abr 28, 2007 12:06 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español.

Léete antes este hilo:
http://perlenespanol.baboonsoftware.com/foro/viewtopic.php?t=1120

¿No has podido aprender Perl a lo largo del curso? ¿Por alguna razón?

Si te animas a hacerlo tu mismo, con gusto te responderemos a todas las dudas.

como bienvenida, te regalo las líneas que añaden una nueva entrada al fichero fstab:

Perl:
$linea = join("\t", $dispositivo, $pmontaje, $tipo, $atributos, $dump, $orden);
print $fichero $linea, "\n";
Mensaje Sab Abr 28, 2007 9:09 pm
ale9gaditano
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Abr 2007
Mensajes: 3
Responder citando

El problema es que en la facultad hemos dado 5 clases de Perl de 1 hora y 15 minutos... por lo cual... creo que no llegamos a ese nivel. Creo que se han pasado un poco bastante con el problema que nos han mandado para lo que hemos dado.

Muchas gracias por el principio.
Saludos
Mensaje Dom Abr 29, 2007 5:33 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

6 horas y cuarto de Perl... yo creo que os han dado bastante... al menos para saber las nociones básicas.

A ver...
* Para leer la línea de argumentos, sólo hay que leer la lista almacenada en @ARRAY
* Para leer el fichero fstab, basta con el open(), <> y close()
* Para sacar el listado ordenado, usar sort()
* La opción -d puede ser algo más complicada, porque hay que recorrer de forma recursiva un árbol de directorios, pero esto es un problema que siempre se pone en los estudios de programación y que se resuelve con una función recursiva y usando opendir(), readdir() y closedir()
* Tanto añadir como borrar entradas implica modificar el contenido del fichero. Si antes lo hemos leído, podemos grabar los cambios con otra tripleta de open(), print() y close()
* Y el resto... no tiene mucha dificultad... es aplicar 'if' a varias situaciones.
Mensaje Dom Abr 29, 2007 7:14 am
ale9gaditano
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Abr 2007
Mensajes: 3
Responder citando

Muchas gracias por todo explorer, me pondré a hacer el programita a ver si me sale, y si me salen dudas os pregunto.

Saludos
Mensaje Sab May 12, 2007 4:39 am
perlperl
Perlero Nuevo
Perlero Nuevo
Registrado: 12 May 2007
Mensajes: 1
algo mas Responder citando

Estoy trabajando en ese programa, pero estoy bastante liado, aquí dejo lo que tengo, a ver si alguien me echa una mano.

Perl:
#Declaración de funciones

sub ElegirOpcion;
sub OpcionL;
#sub OpcionA;
#sub OpcionB;
#sub OpcionT;

#Definición de funciones

sub ElegirOpcion
{
      my $opciones=$_[0];
      print "$opciones\n";

      if(@$opciones[0] eq "-l")
      {
            OpcionL(\@ARGV); #Aqui debería de poner \@opciones pero no funciona
      }
      elsif(@$opciones[0] eq "-a")
      {
            OpcionA(\@$opciones);
      }
      elsif(@$opciones[0] eq "-b")
      {
            OpcionB(\@$opciones);
      }
      else
      {
            OpcionT(\@$opciones);
      }
}

sub OpcionL
{
      my $opcion=$_[0];
      my $num_argumentos;
      my $contador_lineas = 0;
      my $i = 0;
#     print "$opcion\n"; #Aqui me doy cuenta de que los dos punteros no apuntan al mismo sitio

..................................................

..................................................

#Cuerpo principal del programa

$num_argumentos=@ARGV;

if ($num_argumentos==0)
{
      die "Error\nNo has introducido ningún parámetro\nEl formato del comando es : adminfstab –l [ pmontaje | dispositivo [-d]] | -a | -b pmontaje | -t lista_fs...\n";
}
else
{
      if ($ARGV[0] eq "-l"||$ARGV[0] eq "-a"||$ARGV[0] eq "-b"||$ARGV[0] eq "-t")
      {
            ElegirOpcion(\@ARGV);
      }

Muchas gracias
Mensaje Sab May 12, 2007 7:08 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español.

No puedes poner \@opciones porque sencillamente esa variable no existe en tu programa.

Aconsejable, siempre, a la hora de hacer programas Perl, poner use strict; al principio.

En cuanto a la forma de leer los argumentos, me parece un poco liosa. Si no se puede/quiere hacer con un módulo externo, yo lo haría con un bucle for sobre el número de argumentos de @ARGV y dentro de él una serie de if parecido a los tuyos, y en el caso de que una opción, como la -l necesite de más argumentos, leerlos inmediatamente, pasarlos a variables globales e incrementar la variable de índice del for.

Un caso especial es la opción -d, pero eso se resuelve muy fácil en Perl con la ayuda de redo.

P.D. Estamos en el foro Intermedio Wink
Mensaje Dom May 13, 2007 6:11 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 478
Ubicación: Frente al monitor
Responder citando

Sería muy bueno que miraras el módulo Getopt::Long
Mensaje Mie May 16, 2007 5:28 pm
asdfg
Perlero Nuevo
Perlero Nuevo
Registrado: 16 May 2007
Mensajes: 1
Responder citando

eso ale, usa algunos modulos o la orden system o cosas raras ke no hayamos visto en clase, pa ke eugenio te ponga un cerapio.

salu2, y no desesperes
Mensaje Mie May 16, 2007 6:15 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español.

En la definición del problema no dice nada de no poder usar módulos externos.

Y en las respuestas dadas no se ha comentado nada de usar el system().
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group