312 votes

bash fonctions: return boolean pour être utilisé dans les si

Je veux écrire une fonction bash qui vérifier si un fichier a certaines propriétés et renvoie true ou false.. alors je peux l'utiliser dans mes scripts dans le "si". Mais que dois-je retourner?

function myfun(){ ... return 0; else return 1; fi;}

puis-je l'utiliser comme ceci:

if myfun filename.txt; then ...

bien sûr, cela ne fonctionne pas.. comment cela peut-il être réalisé?

430voto

Erik Points 38942

Utilisez 0 pour vrai et 1 pour de faux.

Exemple:

#!/bin/bash

isdirectory() {
  if [ -d "$1" ]
  then
    return 0
  else
    return 1
  fi
}


if isdirectory $1; then echo "is directory"; else echo "nopes"; fi

40voto

Kambus Points 813
myfun(){
    [ -d "$1" ]
}
if myfun "path"; then
    echo yes
fi
# or
myfun "path" && echo yes

14voto

RenRen Points 575

Être prudent lors de la vérification répertoire uniquement avec l'option-d !
si la variable $1 est vide, la case sera toujours une réussite. Pour vous en assurer, vérifiez également que la variable n'est pas vide.

#! /bin/bash

is_directory(){

    if [[ -d $1 ]] && [[ -n $1 ]] ; then
        return 0
    else
        return 1
    fi

}


#Test
if is_directory $1 ; then
    echo "Directory exist"
else
    echo "Directory does not exist!" 
fi

1voto

Nephew Points 11

Il pourrait fonctionner si vous réécrivez cette function myfun(){ ... return 0; else return 1; fi;} que ce function myfun(){ ... return; else false; fi;}. C'est si false est la dernière instruction de la fonction que vous obtenez résultat faux pour la fonction entière, mais return des interruptions de la fonction avec le résultat vrai de toute façon. Je crois que c'est vrai pour mon bash interprète au moins.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X