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:
mkdir /tmp/prueba
mkdir /tmp/prueba
la primera vez no dará error. la segunda, indudablemente sí, el mismo error que ese script.
tambien tienes que fijarte en un datelle de los mensajes de error, que no tiene buena pinta:
esta claro que $idalumno no está ajustado a nada, cuando presumiblemente se esperaba que contuviera algo, que para eso está ahi:
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:
mkdir /home/$idalumno > /dev/null
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:
#!/bin/bash
echo -n "teclea id de alumno y pulsa enter:" # si no pides idalumno...
read idalumno #...siempre será una cadena nula! dudo que quieras eso.
# fijate que aqui abajo me he cargado el SERJK sobrante
mkdir /home/$idalumno > /dev/null # separo los comandos en dos lineas, por comodidad, asi que me llevo el punto y coma
exit_status_de_mkdir=$?
# recojo el $? y lo paso a una variable para mas comodidad,
# para que no se borre nunca, para poder consultarlo uncluso
# miles de comandos mas tarde, sin haberlo perdido por haber ejecutado
# otros comandos por medio. es muy recomendable hacer esto siempre.
# asi puedes poner montones de comandos por medio sin miedo a romper nada,
# porque ese echo $? de por medio te destrozaba todo, al generar otro exit status
# nuevo y colocarlo en $? machacando al anterior.
# recuerda que en $? solo se guarda el ultimo exit status, asi que procura
# consultarlo y ponerlo a salvo justo despues de un comando si no quieres
# perderlo irreversiblemente for ever
# ahora puedes meter mil comandos aqui sin perder el exit status de mkdir
# ahora puedes meter mil comandos aqui sin perder el exit status de mkdir
echo $exit_status_de_mkdir # antiguamente tenias: echo $?
# ahora puedes meter mil comandos aqui sin perder el exit status de mkdir
# ahora puedes meter mil comandos aqui sin perder el exit status de mkdir
if [ $exit_status_de_mkdir=0 ]; then
echo "El directorio $idalumno se ha creado sin problemas"
fi