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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
!/bin/sh
# inpath - Vérifie qu'un programme donné existe en tant que tel,
# ou se trouve dans la liste de répertoires du PATH.
in_path()
{
# Etant donnée une commande et le PATH, cherche la commande. Renvoie
# 0 si elle est trouvée et éxecutable, 1 dans le cas contraire.
# Attention! Ceci modifie temporairement l'IFS (le séparateur de champs
# en entrée) mais le remet en place à la fin.
cmd=$1 path=$2 retval=1
oldIFS=$IFS IFS=":"
for directory in $path
do
if [ -x $directory/$cmd ] ; then
retval=0 # si nous sommes là, nous avons trouvé $cmd dans directory
fi
done
IFS=$oldIFS
return $retval
}
checkForCmdInPath(){
var=$1
# Expliquons la notion du découpage de variable dans la
# conditionnelle suivante: ${var#expr} renvoie tout ce qui suit
# la portion de chaîne correspondant au motif 'expr' dans la
# valeur de la variable (si le motif est reconnu), et
# ${var%expr} renvoie tout ce qui ne correspond pas (dans le cas
# présent, il s'agit du seul premier caractère). On peut encore
# procéder en Bash en écrivant ${var:0:1} et faire appel à
# cut: cut -c1
if [ "$var" != "" ]
then
if [ "${var%${var#?}}" = "/" ] then
if [ ! -x $var ]
then
return 1
fi
! in_path $var $PATH ; then
return 2
fi
fi
}
if [ $# -ne 1 ] ; then
echo "Synthaxe: $0 commande" >&2 ; exit 1
fi
checkForCmdInPath "$1"
case $? in
0 ) echo "$1 trouvé dans le PATH" ;;
1 ) echo "$1 pas trouvé ou pas exécutable" ;;
2 ) echo "$1 pas trouvé dans le PATH" ;;
esac
exit O |
Partager