Accueil > Astuces OSXFAQ > Lundi - Exécutables comme Conditions

Lundi - Exécutables comme Conditions

Ces exemples sont écrits pour le shell Bash. Ils sont applicables à d’autres shells mais la syntaxe peut nécessiter quelques modifications. La forme $(…) doit être remplacée par `…` sous tcsh.

Voir aussi la semaine 56 et la semaine 65.

Incorporez le résultat de l’exécution d’une commande dans une condition.

Par exemple, j’ai récemment eu à écrire un script qui devait attendre (dans une boucle) qu’un volume particulier soit monté. ‘df | grep’ est une manière facile de tester cela :

$ volname=Games

$ df | grep $volname

/dev/disk0s7 5.9G 578M 5.3G 10% /Games

La technique consiste à boucler tant que la sortie de la commande ci-dessus est nulle. Notez que ‘[ -z string ]‘ est vraie lorsque la chaîne a une longueur de zéro (null).

Essai 1 :

$ while [ -z df | grep $volname ]; do echo -n “.”; done

-bash: [: missing `]‘

grep: ]: No such file or directory

‘[' attend une chaîne, nous devons donc capturer la sortie de la commande 'df | grep $volname' et tester cette chaîne.

Essai 2 :

$ while [ -z $(df | grep $volname) ]; do echo -n “.”; done

-bash: [: too many arguments

La sortie de grep est une chaîne contenant des espaces, nous devons donc entourer la chaîne de guillemets de façon à ce qu'elle soit présentée à '[ -z ... ]‘ comme une seule chaîne.

Utilisez “$(…)” pour retourner une seule chaîne à partir de la sortie d’une commande ou d’un pipe :

$ while [ -z "$(df | grep $volname)" ]; do echo -n “.”; sleep 2; done;

…..

Ceci boucle jusuq’à ce que le volume $volname apparaisse.

Notez que ‘echo -n’ est utilisé pour éviter une nouvelle ligne pour chaque point.

Utilisez ’sleep n’ dans le corps d’une boucle d’attente pour éviter de consommer du temps CPU. ‘n’ est en secondes.


Parlez de cette astuce dans le Learning Center forum (en anglais sur osxfaq.com)


Si vous souhaitez en apprendre plus sur Mac OS X Unix visitez le Learning Center
 cliquez ici.

  • Pour les débutants : Le Tutoriel Mac OS X Unix
  • Pour plus d’informations sur des sujets spécifiques : Mac OS X Advanced Unix
  • Pour des réponses à des problèmes communs : Mac OS X How To

Thierry Astuces OSXFAQ

  1. Pas encore de commentaire
  1. Pas encore de trackbacks
Vous devez être identifié pour poster un commentaire