Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/03/2008, à 21:04

insomniak

Script Bash : savoir si appli installée ou pas

Bonjour à tous,

Je suis en train de me faire un petit script pour backuper mon serveur perso à l'insertion d'un HDD externe.
Pour cela je souhaite prévenir le début et la fin du backup et je vais le faire via la commande "beep".
Malheureusement elle n'est pas installée par défaut, et donc j'aimerai savoir si on peut tester si la commande est installée ? si oui par quel moyen ?
J'ai ma petite idée : il suffirait de tester si le fichier beep existe mais selon la distro le chemin pourrait bouger donc pas très efficace... (je pinaille un peu car ce sera toujours une ubuntu, mais si jamais un jour je change je prefere ne pas me retaper tous les scripts si vous voyez ce que je veux dire ^^)

Sinon deuxieme question : comment sait-on dans un script bash qu'une commande a réussi ou echoué ?
Par exemple, je pense faire mon backup via rsync. J'aimerai tout de meme prevenir en cas d'erreur ou en cas de réussite par des sons différents. Savez vous comment on peut faire ce genre de test ?

Merci par avance
@ bientot

Hors ligne

#2 Le 06/03/2008, à 21:15

johnlege

Re : Script Bash : savoir si appli installée ou pas

Bonsoir
pour tester le retour d'un script bash, il te faut tester la valeur de $?, si elle est différente de zéro, la commande exécutée a eu une erreur
pour tester la présence d'une commande, tu peux utiliser whereis -b beep, s'il te renvoi le chemin d'accés à la commande, elle existe sinon tu ne peux l'exécuter, mais il te faudra tester si le chemin d'accés a été trouvé par whereis,


Merci d'indiquer résolu dans le titre quand c'est résolu

Hors ligne

#3 Le 06/03/2008, à 21:18

Sysko le prospecteur

Re : Script Bash : savoir si appli installée ou pas

pour la commande  beep  ,  perso je  la connais pas ,  mais je dirais que  comme  comme toutes les commandes elles se trouvent soit dans  /bin  soit dans  /usr/bin et cela est valable pour toutes les  distros linux respectant  les normes  ( donc   quasi toutes ? )   
donc il suffit de tester si le fichier   beep existe dans l'un de ces répertoires  et le tour est joué 

ensuite  on sait  si une commande  à  reussiré  ou échoué au code de retour qu'elle renvoie   (  accessible  via la  valeur  de $?  ,  sinon  un  commande1 &&  commande2  executera   commande2 si commande1 reussit et  un commande1 || commande2  executera   commande2 si commande1  ehoue   , mais tant  ton qu'à il faudra  plus  faire un  if sur la valeur  $? )

edit :  et mince on ma grillé

Dernière modification par Sysko le prospecteur (Le 06/03/2008, à 21:19)


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne

#4 Le 12/03/2008, à 18:57

Alain.g

Re : Script Bash : savoir si appli installée ou pas

On peut également utiliser "which"

Pour tester la présence de plusieurs programmes, tu peux utiliser une fonction avec boucle au début du script bash
Par exemple (plus ou moins bon hmm) :

#!/bin/bash 
presence () 
{
er=`for i in "$@" ; do which "$i">/dev/null || echo "▸ $i" ; done`
if [ ! -z "$er" ] ; then
	echo -e "Avant d'utiliser ce script, vous devez installer :\n$er"
	exit 1
fi
}
presence beep unaccent ssed

La fonction n'est d'ailleurs pas spécialement utile, ceci revient au même en fait :

#!/bin/bash 
er=`for i in beep unaccent ssed
do
	which "$i">/dev/null || echo "▸ $i"
done`
if [ ! -z "$er" ] ; then
	echo -e "Avant d'utiliser ce script, vous devez installer :\n$er"
	exit 1
fi

Dernière modification par Alain.g (Le 12/03/2008, à 19:17)


Xubuntu Karmic !

Hors ligne

#5 Le 13/03/2008, à 16:16

Saito

Re : Script Bash : savoir si appli installée ou pas

Salut,

ou tout simplement:

for i in beep sed ssed Perle
do
which "$i" &>/dev/null || prog_a_installer+=" $i"
done
if [[ ! -z "$prog_a_installer" ]]; then
    echo -e "Avant d'utiliser ce script, vous devez installer :\n$prog_a_installer"
    exit 1
fi

sans utiliser de backquotes.


Aku-Soku-Zan_Shinsengumi

Hors ligne