Título: [BASH] Pequeña duda de novato en shell Publicado por: Lvio en 12 Febrero 2013, 05:56 am Saludos . Me estoy adentrando en esto de la shell y he visto ejercicios por ahí los he ejecutado y demás y hay uno que no llego a entender y es el siguiente:
Código
y me da esto Código
por lo que tengo entendido tiene que crear un directorio dentro de serjk . Y mis dudas con estas:
Gracias [MOD] Usa el botón "Insertar códigos" no uses el de citar para insertar códigos, te he editado otras partes del comentario para que véas que es sencillo formular un buen post. Título: Re: Pequeña duda de novato en shell Publicado por: alister en 12 Febrero 2013, 06:14 am hola.
buena eleccion. el scriptng de shell es una habilidad basica que resuelve montones de problemas cotidianos. te cuento Pero porque no me lo crea ? obvio. lo dice el error: porque ya existe.haz la prueba tu mismo por comandos a mano y lo veras enseguida: Código: mkdir /tmp/prueba tambien tienes que fijarte en un datelle de los mensajes de error, que no tiene buena pinta: Código: home/serjk/ esta claro que $idalumno no está ajustado a nada, cuando presumiblemente se esperaba que contuviera algo, que para eso está ahi: Citar mkdir /home/serjk/$idalumno asi que el problema sin duda es ese. si $idalumno tuviese algun valor, (supongamos que tiene el valor "lvio"), el script estaria creando la carpeta "/home/serjk/lvio" en lugar de "/home/serjk/" la cual ya existe. y dandole otra vuelta de tuerca, aunque quizas cometo un error de suposición, pero es que esto que te diré me sigue pareciendo un error: dudo mucho que quieras tener carpetas de otros usuarios ($idusuario) dentro de la carpeta de un usuario (/home/serjk). yo creo mas bien que el code correcto seria: Código: mkdir /home/$idalumno > /dev/null Citar y porque teniendo que $? = 0 y en este caso tengo uno me hace el echo , si he puedo la condición que solo en caso de que sea 0 ? ese echo $? ahi es una gravisima cagada. si quieres saber el resultado de mkdir, tienes que recoger la variable $? INMEDIATAMENTE DESPUES, pero el echo de por medio arruina la idea, devolviendo siempre un cero, y anulando toda la posibilidad de detectar errores en mkdir. solucion a todo junto: Código
Título: Re: [BASH] Pequeña duda de novato en shell Publicado por: Lvio en 12 Febrero 2013, 06:28 am entonces si no doy valor ninguno a $idalumno--- no me crea nada? .
" para que se solucionase el erro podria decir que $idalumno=carpeta 2? me crearía carpeta 2 no?" Título: Re: [BASH] Pequeña duda de novato en shell Publicado por: alister en 12 Febrero 2013, 06:32 am entonces si no doy valor ninguno a $idalumno--- no me crea nada? . " para que se solucionase el erro podria decir que $idalumno=carpeta 2? me crearía carpeta 2 no?" si $idalumno vale "" (cuando digo "" quiero decir nada) entonces, segun tu script original donde claramente ponia: Código: mkdir /home/serjk/$idalumno el resultado es: Código: mkdir /home/serjk/ del mismo modo, si prevamente asignamos el valor "elhacker" a la variable idalumno: Código: idalumno="elhacker" el resultado de evalurar esa expresion en bash obviamente seria: Código: mkdir /home/serjk/elhacker estamos hablando de variables y de como funcionan a la hora de sustituirse por sus valores. y esto es lo mas basico de todo en bash. no avances sin ver esto super claro, hasta que no te salga de forma natural. Título: Re: [BASH] Pequeña duda de novato en shell Publicado por: Lvio en 12 Febrero 2013, 06:48 am Estoy bastante liado con esto... tanto que estoy sacrificando mi sueño (es una asignatura de mi uni)
hice ya un pequeño script: Código: Código: > #!/bin/bash En el caso de arriba me funciona a la perfección ya que creé con anterioridad papelera luego más abajo pasé unos parámetros (ficheros creados con anterioridad) y los muevo a papelera ... pero lo llamo así $papelera ... el ejercicio que puse lo ví en un tutorial y me sorprendía que $idalumno no tuviera ningún valor ... quiero hacerlo yo y se me ocurre de la siguiente manera después de que me explicaras ciertas cosas Código: #!/bin/bash Título: Re: [BASH] Pequeña duda de novato en shell Publicado por: alister en 12 Febrero 2013, 06:56 am si estas creando carpetas con nombres de otros usuarios DENTRO de tu carpeta de usuario, entonces está perfecto.
luego, si pones /home/alumnos/carpeta2 como algo estático, sin variables, lo que pasará es que la primera vez que ejecutes el script, creará la carpeta, pero a partir de la segunda, no creará la carpeta y veras un mensajito de error diciendo que ya existe. la sintaxis correcta de ese estilo de if, para comparar valores, es la siguiente: Código: if [ $? == 0 ] por eso falla la condicion. como ya has visto, un solo error en un espacio y te la cargas :) creo que al reciclar codigo tuyo, tambien caí antes en este tipico error xD PD: no se si te interesa saberlo, pero el comando Código: mkdir -p lo usamos constantemente en scripts bash porque a veces nos va a importar un bledo si la carpeta estaba ahi antes o no, simplemente queremos que esté a partir de ahora. http://linux.die.net/man/1/mkdir Título: Re: [BASH] Pequeña duda de novato en shell Publicado por: Lvio en 12 Febrero 2013, 07:02 am bueno al final resultó ser así
Código:
Darte las gracias sobretodo a estas horas , te estoy muy agradecido macho :P te invitaba a unas cañas.. por cierto para controlar esto se necesitan muchas muchas horas no? , y supongo que muchas frustaciones Título: Re: [BASH] Pequeña duda de novato en shell Publicado por: Lvio en 12 Febrero 2013, 07:04 am ya está todo :)
Título: Re: [BASH] Pequeña duda de novato en shell Publicado por: alister en 12 Febrero 2013, 07:17 am Código: una ultima cosa, con la que te voy a insistir una segunda vez espaciado adecuado , o tu script petará de manera inexplicable antes de lo que esperas xDDD no hay de que. para ser bueno en cualquier cosa se requiere superar la media de horas de practica. las frustraciones son una decision del que practica. si disfrutas, es un reto, pero no una frustracion. mentalidad hacker aplicada! :) saludos |