Créer un script Unix sous OS X
Initiation et rappels des bases pour réaliser un script Shell.
Une première fonction
Maintenant que toutes les étapes préliminaires sont faites, on va pouvoir écrire les premières lignes et donc fonctions du script. Dans l'article sur la carte Raid, j'ai parlé de trois fonctions, ou plutôt trois options pour la commande megaraid : megaraid -showadapter, megaraid -showconfig et megaraid -showdevices. On va donc créer des fonctions pour ces trois commandes. Je le redis, ces trois premières fonctions ne sont pas indispensables, mais je les écris dans un but pédagogique, car elles sont simples, et permettent de comprendre la syntaxe d'une fonction.J'ai donc maintenant trois fonctions qui me permettent de récuperer les informations dont j'ai besoin, mais je récupère ces informations de façon brute. Il va donc falloir en extraire les parties les plus utiles, et les formatter pour en faire une page html. Pour cela, on va commencer à rentrer dans le vif du sujet, et écrire des choses un peu plus compliquées. Le pipe, noté |, permet de cascader des commandes : le résultat d'une commande devient le point de départ d'une deuxième commande. Ainsi, dans les infos que me donne megaraid -showadapter, j'estime que seules les 4 dernières lignes m'intéressent. La commande tail -4 permet de garder les 4 dernières lignes. Mais les 4 dernières lignes de quoi? Les 4 dernières lignes de la commande précédente, grâce à un pipe qui me permet de cascader des commandes. Alors que ma première fonction (get_adapter) permettait d'obtenir des informations brutes, ma deuxième commande, extract_adapter, va me permettre d'extraire les lignes qu'il me faut des données brutes :
Pour la deuxième commande, megaraid -showconfig, je n'ai cette fois que besoin d'une seule ligne, la ligne 8. Je vais donc extraire cette ligne, cette fois ci non plus avec tail, mais avec sed (comme je l'ai dit, cet article a un but pédagogique, donc sans tomber dans l'excés, j'essaie d'utiliser un maximum de fonctions différentes). Plus précisemment, dans cette ligne numéro 8 qui contient plein de choses séparées par des espaces, seul le cinquième élément (si on sépare les éléments par rapport aux espaces) m'est utile. On complique donc encore un peu, et on cascade encore avec une nouvelle fonction et un autre pipe, le tout sur une seule ligne : j'extrait donc la ligne 8 des infos brutes, et dans cette ligne 8, j'extrais le cinquième champ (élément), grâce à une nouvelle fonction (awk) :
Et enfin pour la troisième commande, megaraid -showdevices, j'ai besoin non pas des n dernières lignes ou bien d'une seule ligne, mais des lignes 8 à 11. Ces lignes contiennent aussi pas mal d'espaces entre chaque information, mais j'ai cette fois ci besoin de toutes les informations de la ligne, et je veux supprimer tous les espaces. Je vais encore utiliser un deuxième pipe, pour cascader cette fois ci avec la commande tr, afin de supprimer les répétitions d'espaces :
On a donc déjà plutôt pas mal avancé, puisqu'en plus d'avoir réussi à écrire nos premières fonctions pour extraire les données brutes, on arrive maintenant à écrire des fonctions plus évoluées pour extraires les informations pertinentes des données brutes. Il reste maintenant à créer une page html à partir de ces données que l'on vient d'extraire.