Si vous utilisez un serveur Linux, il peut être utile d'utiliser le langage Shell qui permet d’exécuter du code. Voici quelques bases pour commencer.
Si vous utilisez un serveur Linux, il peut être utile d'utiliser le langage Shell qui permet d’exécuter du code un peu comme on le ferait avec des fichiers batch (ou *.bat) sous Windows.
Avant de commencer la programmation je vais vous détailler un peu plus le Shell.
Alors non le Shell n'est pas le nom d'un géant pétrolier mais un langage de programmation des systèmes Unix (Linux et Mac).
Si l'on traduit le mot Shell en français cela nous donne coquille, coque ou coquillage. C'est un interpréteur de commandes qui permet d'avoir accès aux commandes et fonctionnalités internes du système d'exploitation. Il est accessible depuis la console ou un terminal.
Maintenant que l'on en sait un peu plus on va commencer à programmer. Cet article étant pour les novices, je vais essayer de détailler au mieux ce que je vais faire mais je vais aussi ne faire que des codes simples qui peuvent servir. Je ne vais pas me lancer à faire des scripts trop complexes.
Avant de commencer n'importe quel script il faut lui indiquer le type de Shell que nous allons utiliser. Nous allons utiliser le plus connu le bash (Bourne-Again Shell) :
#!/bin/bash
#!/bin/bash
Voici un script (liste.sh) très simple qui permet de lister les fichiers qui sont dans le dossier de mon script :
#!/bin/bash
# Permet de dire que le script sera en UTF-8 et du coup les accents seront pris en charge
export LANG="fr_FR.UTF-8";
# Permet d'afficher un message à l'utilisateur qui va lancer le script
echo Voici les fichiers qui sont dans ce dossier :
# Liste tous les fichiers et dossier du répertoire courant
ls
# Ferme le script après l’exécution
exit 0
#!/bin/bash
# Permet de dire que le script sera en UTF-8 et du coup les accents seront pris en charge
export LANG="fr_FR.UTF-8";
# Permet d'afficher un message à l'utilisateur qui va lancer le script
echo Voici les fichiers qui sont dans ce dossier :
# Liste tous les fichiers et dossier du répertoire courant
ls
# Ferme le script après l’exécution
exit 0
Alors oui c'est très bien mais comment je fais pour le lancer.
sh liste.sh
sh liste.sh
La création d'une variable est très simple :
# Il ne doit y avoir aucun espace de chaque cotés du =, sinon vous aurez une erreur
ma_variable="Une chaîne de caractère par exemple"
# Affichage de ma variable
echo $ma_variable
# Il ne doit y avoir aucun espace de chaque cotés du =, sinon vous aurez une erreur
ma_variable="Une chaîne de caractère par exemple"
# Affichage de ma variable
echo $ma_variable
En Shell il n'y a pas de concaténation donc voici comment rajouter du texte à la fin de notre variable à la fin :
ma_variable="Une chaîne de caractère par exemple"
ma_variable="$ma_variable avec du texte à la fin"
ma_variable="Une chaîne de caractère par exemple"
ma_variable="$ma_variable avec du texte à la fin"
Nous pouvons aussi manipuler les dates en Shell :
# Afficher la date du jour
echo $(date) # Wed Jul 22 12:40:36 GMT 2015
# Afficher la date du jour
echo $(date) # Wed Jul 22 12:40:36 GMT 2015
Si l'on souhaite afficher d'autres informations comme par exemple la date au format dd/mm/aaaa hh:mm:ss
# Le + permet de passer des paramètres à la fonction et les %d, %m ... sont les paramètres.
# Le \ avant le %T ou %H permet d’échapper l'espace car sinon il crée une erreur
echo $(date +%d/%m/%Y\ %T)
# ou
echo $(date +%d/%m/%Y\ %H:%M:%S)
# Le + permet de passer des paramètres à la fonction et les %d, %m ... sont les paramètres.
# Le \ avant le %T ou %H permet d’échapper l'espace car sinon il crée une erreur
echo $(date +%d/%m/%Y\ %T)
# ou
echo $(date +%d/%m/%Y\ %H:%M:%S)
Si vous souhaitez voir tous les paramètres, voici un lien qui les résume tous, et en français : http://www.christopher.compagnon.name/techno/shell-date.html
Les opérateurs sont très simple à comprendre
Supérieur à (>)
-gt
-gt
Supérieur ou égal à (>=)
-ge
-ge
Inférieur à (<)
-lt
-lt
Inférieur ou égale à (<=)
-le
-le
var=4
# Notez bien cette fois-ci les espaces dans les conditions qui sont important
if [ $var = 1 ]
then
echo "non"
elif [ $var = 2 ]
then
echo "toujours pas"
else
echo "j'abandonne"
fi
var=4
# Notez bien cette fois-ci les espaces dans les conditions qui sont important
if [ $var = 1 ]
then
echo "non"
elif [ $var = 2 ]
then
echo "toujours pas"
else
echo "j'abandonne"
fi
Le while veut dire "tant que". Tant que ma condition est réussie je continue ma boucle.
while ma_condition
do mon_script
done
while ma_condition
do mon_script
done
Le until (jusqu'à ce que) fonctionne de la façon inverse. Je fais mon script jusqu'à ce que ma condition soit vérifiée.
until ma_condition
do mon_script
done
until ma_condition
do mon_script
done
Pour faire simple. Tant que je dis la vérité, je ne suis pas un menteur. Mais jusqu'à ce que je dise un mensonge, je suis un menteur. Cela peut paraître un peu complexe mais ce n'est rien. Quand vous ferez vos premiers scripts vous comprendrez.
Le for fonctionne un peu comme le for de twig (pour ceux qui utilisent ce moteur de template).
for element in elements
do echo "$element"
done
for element in elements
do echo "$element"
done
Voici un exercice assez simple pour voir si vous avez compris le fonctionnement du Shell.
Vous devrez faire un script qui demande à l'utilisateur de rentrer un mot de passe (que vous aurez défini) et vous lui demanderez de le rentrer à chaque fois si le mot de passe n'est pas le bon. Ensuite, une fois qu'il aura trouvé le bon mot de passe demandez lui son âge. Il doit être supérieur à 20, sinon dites-lui qu'il est trop jeune. Inférieur ou égale à 30, sinon dites-lui qu'il est trop vieux. Et enfin s'il a le bon age, dites lui que c'est parfait.
Pour récupérer le contenu de ce que l'utilisateur va taper il faut faire :
echo "Ma question"
read reponse
echo "Ma question"
read reponse
reponse est automatiquement une variable.
Voilà, j'espère que ce petit tuto vous aidera à débuter avec le Shell, et si vous avez des questions ou remarques, laissez-les dans les commentaires.
PS : La réponse est juste après, je vous laisse faire une auto-correction, et en cas de doute, mettez votre proposition dans les commentaires.
#!/bin/bash
magic_word="secret"
echo "Quel est le mot magique ?"
read mot_magique
while [ $magic_word != $mot_magique ]
do
echo "Ce n'est pas le bon mot. Réssayez :"
read mot_magique
done
echo "Bravo ! Mais quel est ton age ?"
read age
if [ $age -le 20 ]
then
echo "Trop jeune !"
elif [ $age -gt 30 ]
then
echo "Trop vieux !"
else
echo "Parfait !"
fi
exit 0
#!/bin/bash
magic_word="secret"
echo "Quel est le mot magique ?"
read mot_magique
while [ $magic_word != $mot_magique ]
do
echo "Ce n'est pas le bon mot. Réssayez :"
read mot_magique
done
echo "Bravo ! Mais quel est ton age ?"
read age
if [ $age -le 20 ]
then
echo "Trop jeune !"
elif [ $age -gt 30 ]
then
echo "Trop vieux !"
else
echo "Parfait !"
fi
exit 0