Gagner du temps avec le Shell Scripting

30/07/2019

Aucun commentaire

Qui n’a jamais rêvé, en se levant le matin, de pouvoir faire couler un bon café, d’allumer la télévision, de lancer un cycle sur votre machine à laver, de faire sauter les biscottes de votre grille pain favoris le tout , en ayant tout simplement appuyé sur votre interrupteur de salon ? 

“Ah bon ? Tu aimerais faire ça toi ?” 

 

Oui ! Nous sommes, je pense, tous d’accord pour dire que cela nous faciliterait drôlement la vie ! Ça tombe bien car le sujet de cet article a pour but de vous faire découvrir le shell scripting et d’utiliser le langage de script du shell dans vos actions du quotidien, sur votre poste de travail et bien plus encore…

 

Pré-requis

 

Avant de commencer, il vous faudra donc un shell. Un shell, c’est un interpréteur de commandes. Si vous êtes sur un système d’exploitation Unix, alors vous n’avez pas de question à vous poser puisque la plupart possède un shell bash. Sinon pour les fans de l’open-source, faites votre choix parmis les nombreuses distributions Linux. Pour ma part, je serai sur un système Mac OS avec un shell zsh (sensiblement identique à bash, puisqu’ils héritent tous deux de sh) pour cette introduction et les futurs tutos en rapport avec le sujet. Sachez qu’il est également possible d’installer un interpréteur de commandes shell sur Windows.

 

Où travailler ?

 

Dans cette première partie, nous allons coder nos premières lignes de shell dans le fichier .bashrc (ou .zshrc). Ce fichier caché fait partie de ceux de démarrage de votre shell bash. Il se trouve dans les fichiers de configuration de votre système, dans le dossier /etc. Néanmoins ici nous n’allons pas prendre de risque. Je vais donc vous demander (si ce n’est pas déjà le cas) de le créer dans votre dossier personnel  : 

 

/home/{votre_nom_utilisateur}/.bashrc 

 

En faisant cela, notre fichier nouvellement créé sera prioritaire. Vous obtiendrez ainsi notre “Sandbox”.

 

“D’accord mais il sert à quoi ce fichier ?” 

 

Ce fichier permet à l’utilisateur de personnaliser son shell. Grâce à lui, vous aurez la possibilité de créer des alias, que nous verrons un peu plus bas, mais aussi des services plus complexe à l’aide de fonctions que nous pourrons librement exécuter depuis notre terminal.

Par exemple, voici une de mes fonctions permettant d’effectuer rapidement une recherche sur google :

#Alias google chrome pour mac

alias chrome="open -a 'Google Chrome'" # Ouvre google chrome
# Fonction de recherche

function gs () {

    local base_url="https://www.google.com/search?q="
    local input="$*"
    local delimiter="+"

    if [[ ! -z "$*" ]] then

        chrome "$base_url${input// /$delimiter}"

    fi

}


Tester son code 

 

Pour tester ce code il vous suffira de le copier tout en bas de votre fichier en ayant au préalable ouvert ce fichier avec votre éditeur de code. Une fois ceci fait, sauvegardez puis revenez sur votre terminal et lancez la commande suivante : 

source ./.bashrc

 

Cette commande permet de rafraîchir votre fichier et ainsi rendre utilisable votre nouvelle fonction de recherche google.

Maintenant essayez ! Tapez la commande suivante : 

gs troispointzero 

 

Les variables 

 

Maintenant que vous savez tester votre code, voyons maintenant les bases du langages en commençant par le b.a.-ba, les variables.

Voici comment on déclare une variable :

 

maVar=’Hello World!’

 

On indique le nom de la variable, puis on lui assigne une valeur avec le signe d’affectation  ‘=’.

 

Attention, veillez bien à ne pas mettre d’espace entre le nom, le signe d’affectation et la valeur que l’on affecte. Dans le cas contraire, il en ressortira une jolie erreur de syntaxe.

 

Pour faire appel à cette variable dans notre code, on préfixe celle-ci par un $, par exemple : 

 

echo $maVar

 

Cela aura pour effet d’afficher ‘Hello World!’ dans votre terminal.

 

NB: Si vous êtes du genre pressé et que vous voulez tester directement ce genre de commandes sans refaire les manip’ précédente, libre à vous de déclarer cette variable directement dans votre terminal puis d’utiliser la fonction echo pour en voir directement le résultat.

 

Sachez également qu’en déclarant une variable de la sorte, sa portée est globale. C’est à dire qu’elle accessible dans n’importe quelle parties de votre code, je pense notamment aux fonctions. Pour ces dernières, on pourra choisir de limiter la portée d’une variable déclaré en leurs seins, appelé aussi “le scope”, à l’aide du mot clé suivant :

 

local maVar=”Hello World!”

 

Avec ce mot clé vous indiquez tout simplement que cette variable à une portée limité à la fonction dans laquelle elle est déclarée.

 

 

Les conditions

 

Passons maintenant aux conditions. Comme vous avez pu le voir dans la fonction de recherche google que j’ai codé plus haut, on y aperçoit quelques mots clés qui ont surement fait “tilt” dans votre tête de codeur aguerri. En effet, on y retrouve une condition que je vais vous détailler dès à présent.

 

On démarre donc avec un mot-clé que vous avez l’habitude de voir et qui déclare notre condition, le “if”. Ensuite pour encadrer notre test nous avons deux paires de crochets. Pour encadrer notre code exécuté quand la condition est vraie, on commence ici avec le mot-clé “then” ensuite nous allons à la ligne, tabulation (ou 4 espaces pour ne froisser personnes), notre code, et enfin nous fermons le tout avec un “fi”. Bien sûr, pour les conditions plus complexes, sachez qu’il est tout à fait possible de mettre un “else” ou encore un “elif” quand il s’agit de tester plusieurs choses.

 

Revenons maintenant à notre test afin de détailler son contenu . C’est aussi l’occasion pour moi de vous montrer les quelques opérateurs conditionnels que je connais.

Dans notre condition on commence par un “!” signifiant “not”. Cela signifie que notre condition est inversée (si de base, le résultat de notre expression vaut “true” alors il vaudra “false” et inversement). Juste après nous avons notre opérateur “-z” qui retourne “true” si notre variable est vide. Enfin nous retrouvons notre super argument de fonction qui englobe tous les paramètres suivant le nom de notre fonction, lors de son utilisation. En l’occurrence ici, les mots de notre recherche. Littéralement cela nous donne :  » Si mon super argument contenant tous les mots de ma recherche n’est pas vide alors fait ceci… »

Je m’arrête là pour aujourd’hui, histoire de vous laisser du temp pour vous exercer. Dans la prochaine partie nous verrons ensemble plus en détail, les fonctions ainsi que le passage d’argument au sein de celle-ci et je vous expliquerai également  le contenu de notre fonction de recherche et plus encore… En attendant prenez soin de vous et à bientôt !