Cet article a pour but de vous initier au script Shell, cette pratique vous permet de centraliser une multitude de script hors développement web.
Pour cela, je vais créer un script qui va me faciliter l’installation de mon projet Symfony sur mon local et sur mon environnement de développement.
Initialisation
Pour créer un script shell, nous avons juste besoin de créer un fichier “.sh”. Dans notre cas je vais créer un fichier qui s’appelle “install.sh”.
Cependant cela ne suffit pas comme par exemple les fichiers php, nous avons besoin de plus de détails afin que notre système d’exploitation identifie le fait que c’est un script shell.
Le SheBang
Le Shebang est un en-tête du fichier texte qui va permettre au système d’exploitation de comprendre que c’est un script. Par exemple les fichiers php commencent toujours avec “<?php”.
Pour notre script, notre première ligne sera défini comme ci-dessous :
#!/bin/bash
Créons notre script Shell
Désormais notre système d’exploitation va reconnaître notre script, nous allons lui donner quelques instructions
#!/bin/bash
echo "Hello World"
exit
Nous allons afficher sur notre terminal Hello World lorsqu’on exécute le script.
Avant de l’exécuter il faudrait que le fichier soit executable :
> chmod +x script.sh
> ./script.sh
Hello World
Plus en détail, la fonction chmod permet d’attribuer des droits sur un dossier ou un fichier.
Les droits sont les suivantes :
- Ecriture (w)
- Lecture (r)
- Exécuter (x)
Lorsqu’on crée notre script, nous attribuons le droit d’écriture et de lecture.
Donc l’argument +x permet de pouvoir exécuter le script.sh.
Variables predefinis
Pour aller plus loin dans notre script, nous voulons récupérer par exemple un paramètre.
Voici une liste des variables qu’on peut utiliser dans notre script
Variable | Description |
$0 | Nom du script |
$1, $2, …, $9 | 1er paramètre, deuxième paramètre, … de la ligne de commande |
$* | Tous les paramètres en une string |
$@ | Tous les paramètres avec des séparateurs |
$- | Options du shell |
Des variables qui vous permettent de récupérer des informations de la dernière commande effectué.
Variable | Description |
$! | PID du dernier processus lancé en arrière plan |
$? | Code de retour de la dernière commande |
$$ | PID du shell |
$_ | Dernier argument de la commande précédente |
Maintenant, utilisons une variable pour notre script
#!/bin/bash
echo "Hello World $1"
echo "Vous avez $2 ans"
exit
> ./script.sh Gary 28
Hello World Gary
Vous avez 28 ans
Variables déclarable dans notre Script Shell
Pour optimiser son script, on peut créer des variables au début de notre script.
#!/bin/bash
NAME="Gary Houbre"
echo "Hello World ${NAME}"
exit
> ./script.sh
Hello World Gary Houbre
Interaction avec l’utilisateur
Vous aimerez dans votre script, créer une interaction (question/réponse).
Voici un exemple de script avec un échange avec l’utilisateur afin de connaître des informations de sa part.
#!/bin/bash
echo "Quel est votre prénom ?"
read firstName
# Si vous voulez faire en une ligne
read -p "Quel est votre nom ?" lastName
echo "Vous vous appelez $firstName $lastName"
exit
Les fonctions
Pour optimiser notre script, nous pouvons créer des fonctions.
#!/bin/bash
read -p "Quel est votre prénom ?" firstName
function show() {
echo "merci $firstName"
exit 1
}
show
exit
Les conditions et boucles
Afin de rendre le script un peu plus intelligent, nous pouvons inclure des conditions et des boucles.
Un exemple avec une condition sur le retour de l’interaction d’utilisateur.
#!/bin/bash
read -p "Quel est votre prénom ?" firstName
function show() {
if [ $firstName == "Gary" ] ; then
echo "merci $firstName"
else
echo "merci Annonyme"
fi
exit 1
}
show
exit
Un exemple , où on utilise une boucle.
#!/bin/bash
read -p "Donne moi un chiffre en dessous de 100 ?" number
function getWhile() {
$i = $number
echo "/// WHILE ///"
while [ $i -lt 100 ] ; do
echo $i
i=$[$i+1]
done
exit
}
function getFor() {
$i = $number
echo "/// FOR ///"
for ((i=0;i<100;i=i+1)); do
echo $i
done
exit
}
getWhile
getFor
exit
Conclusion
Avec l’ensemble des points, nous pouvons effectuer un script d’installation d’un projet Symfony.
#!/bin/bash
# Script à la racine d'un projet Symfony
function composerInstall() {
echo "Installation Composer"
composer install
exit
}
function databaseCreate() {
echo "Creation de la base de donnée"
php bin/console doctrine:database:create
read -p "Utilisez-vous des fichiers de migration (Y/N) ?" migration
if [ $migration == "Y" ]
then
php bin/console doctrine:migration:migrate -n
else
php bin/console doctrine:schema:update --force --complete
}
if [ -e .env.local ]
then
databaseCreate
else
echo "Pas de fichier .env.local existant"
fi
echo "Installation fini"
exit
Ceci est un exemple simple d’effectuer un script Shell qui vous permet de vous faciliter la mise en place de votre projet.
Avec l’ensemble des exemples de script Shell que nous avons vu. Vous être prêt à mettre en place des scripts pour optimiser votre espace de travail.
Si vous voulez voir plus loin dans les scripts, je vous conseille l’article suivant : Lien