Linux/Unix Shell Scripting - Duda sobre return 1 y como lo interpreta el IF

 
Vista:
sin imagen de perfil
Val: 9
Ha disminuido 1 puesto en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Duda sobre return 1 y como lo interpreta el IF

Publicado por jask (3 intervenciones) el 03/04/2019 13:08:52
Muy buenas,

Estoy haciendo un pequeño script que comprueba si existe o no una carpeta y me estoy encontrando con un problema que no entiendo.

Tengo una función que comprueba si existe una carpeta (return 0), si no la crea (return 0), y si por temas de permisos no se puede devuelve error (return 1)

Invoco a la función y luego compruebo con un IF si el resultado devuelto es un 1 o un 0. Si es un 1 pinto un mensaje de error y salgo del script.

Mi problema viene en este último punto, cuando hago la comprobación, parece que le llega los valores 1 pero en el IF no entra.. por lo que me estoy volviendo loco, ¿alguna idea?

Adjunto script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
 
# Main folders
INPUT="input"
OUTPUT="output"
 
# Functions
 
function checkFolderExist(){
    if [ -d $1 ]
    then
        # 0 = true
        # Cambiar a 0, de pone en 1 a modo de prueba únicamente.
        return 1
    else
        mkdir $1
        result=$?
        if [ result==0 ]
        then
            # 0 = true
            return 0
        else
            # 1 = false
            return 1
        fi
    fi
}
 
 
CHECKINPUT=$(checkFolderExist $INPUT)
echo $?
CHECKOUTPUT=$(checkFolderExist $OUTPUT)
echo $?
 
# If folders does not exist, exit the script
if [[ "$CHECKINPUT" = 1 || "$CHECKOUTPUT" = 1 ]]; then
    echo "[+] Las carpetas NO existen y tampoco se pueden crear. Por favor, revisa los permisos del directorio."
    exit 1
fi

Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Duda sobre return 1 y como lo interpreta el IF

Publicado por Tom (332 intervenciones) el 03/04/2019 14:42:17
Lo que te pasa es que no has leído mucho sobre esto. No estás comprobando el valor devuelto por return, sino lo que se sque a la "salida standard".
Ese "$?" que has puesto por ahí (sin saber para qué) y que no usas, es precisamente lo que deberías usar en el if.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha disminuido 1 puesto en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Duda sobre return 1 y como lo interpreta el IF

Publicado por jask (3 intervenciones) el 04/04/2019 10:59:32
Gracias por la información.

Bueno estoy leyendo al respecto y como no entendía muy bien pues decidí preguntar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 93
Oro
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Duda sobre return 1 y como lo interpreta el IF

Publicado por caic (98 intervenciones) el 04/04/2019 10:32:47
Hola,

Como bien dice Tom, estás asignando a CHECKINPUT y CHECKOUTPUT el valor de la salida estándar de checkFolderExist. No el valor del return.

Tú código debería ser algo así:

1
2
3
4
5
6
7
8
9
(...)
 
checkFolderExist $INPUT
CHECKINPUT = $?
 
checkFolderExist $OUTPUT
CHECKOUTPUT = $?
 
(...)

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 9
Ha disminuido 1 puesto en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Duda sobre return 1 y como lo interpreta el IF

Publicado por jask (3 intervenciones) el 04/04/2019 11:00:10
Muchísimas gracias, ahora creo que lo entiendo mejor.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar