Comment écrire un script shell simple sur un VPS (Partie 3)
Introduction
Les instructions conditionnelles sont indispensables à tout script utile et langage de programmation complet. Dans la troisième partie de notre didacticiel Shell Script, vous apprendrez tous les "if" et "else" de bash, et comment les utiliser à votre avantage. Cet article a également été écrit en supposant que vous avez déjà configuré votre dossier de script shell conformément au premier tutoriel.
La commande "si"
Une instruction conditionnelle est utilisée pour effectuer certaines actions si une condition est true ou false. Avec les scripts shell, cela est effectué par la commande "if". Il est suivi d'une expression qui va être testée. Cette expression peut aussi être le code de sortie de l'exécution d'une commande, une expression mathématique, entre autres choses diverses. Lorsque vous travaillez avec des codes de sortie, la commande est assez simple :
if ls folder then echo "Folder exists" fi
Si le dossier existe, la commande echo s'exécutera, car ls aura renvoyé le code de sortie 0, comme réussi. Sinon, si le dossier n'existe pas, le texte ne sera pas affiché. Toutes les instructions "if" doivent être suivies de la commande "then" et se terminer par "fi". Si vous ne travaillez pas avec des codes de sortie et que vous souhaitez tester une expression mathématique par exemple, vous aurez besoin de la commande "test". Il existe les opérateurs suivants dans le script shell pour comparer les nombres :
-eq or Is equal to -ne or Is not equal to -lt or Is less than -le or Is less than or equal to -gt or Is greater than -ge or Is greater than or equal to
Les commandes de test peuvent être écrites de deux manières :
if test 4 -gt 3 or if [ 4 -gt 3]
Les deux fonctionnent exactement de la même manière et nécessitent également "then" et "fi". Exemple:
if [ 20 -lt 10 ] then echo "What?" fi
"Quoi?" ne s'affichera jamais, car 20 est supérieur à 10. Maintenant, que se passe-t-il si vous souhaitez afficher un message à l'utilisateur, au cas où l'instruction if renvoie false ?
La commande "sinon"
"Else", comme son nom l'indique, ajoute une route alternative pour la commande if. C'est assez basique :
if [ 20 -lt 10 ] then echo "What?" else echo "No, 20 is greater than 10." fi
Outre les expressions mathématiques, vous pouvez également comparer des chaînes avec if/else. Ils nécessitent une syntaxe légèrement différente, mais utilisent toujours les commandes test ou "[ ]". C'est la syntaxe :
string = string or string equals string string != string or string does not equal string string or string is not null or not defined -n string or string is not null and exists -z string or string is null and exists
Il existe également un moyen de connaître les propriétés du fichier :
-s file tests for a file that is not empty -f file tests if the file exists and is not a folder -d folder tests if it's a folder and not a file -w file tests if the file is writable -r file tests if the file is read-only -x file tests if the file is executable
"si" imbriqués
Vous pouvez également placer des instructions "if" entières à l'intérieur d'autres, créant ainsi ce qu'on appelle un "if imbriqué". Dans l'exemple suivant, nous ' apprendrons cela à l'aide de l'entrée utilisateur fournie par read, que nous avons apprise dans le tutoriel précédent :
#!/bin/bash echo "Input which file you want created" read file if [ -f $file ] then echo "The file already exists" else touch $file if [ -w $file ] then echo "The file was created and is writable" else echo "The file was created but isn't writable" fi fi
Exemple de scénario
Dans cet exemple, nous allons continuer à essayer d'améliorer notre script de sauvegarde de fichiers avec ce que nous apprenons. Cette version inclut le test du dossier de sauvegarde pour voir s'il existe, ou s'il n'existe pas, s'il a les droits pour le créer. D'abord, comme d'habitude, créez le script :
touch ~/bin/filebackup3 chmod +x ~/bin/filebackup3 nano ~/bin/filebackup3
Et continuez à le modifier:
#!/bin/bash #Backup script 3.0 #Description: makes a copy of any given file at the backup folder #Author: Your Name #Date: 9/29/2013 #Request the backup folder from the user: echo -e "\e[47m\e[1m\e[32mFile Backup Utility\n\e[39m\e[0m\e[47mPlease input your backup folder:" read BACKUPFOLDER #The script will make sure the folder exists if [ -d $BACKUPFOLDER ] then echo "You backup folder exists and will be used." else mkdir $BACKUPFOLDER if [ -d $BACKUPFOLDER ] then echo "Backup folder created successfully." else echo -e "I do not have the rights to create your backup folder.\nThis script will now exit." exit 1 #exit 1 is a command that exits the script with an error code fi fi #Request files to be backed up: echo -e "\e[30mWhich files do you want backed up?\e[39m\e[49m" read FILES if [ -n $FILES ] then cp -a $FILES $BACKUPFOLDER else echo "File does not exist." fi
Le script vous indique quand le dossier de sauvegarde que vous avez tapé n'existe pas, quand il en crée un, quand il ne peut pas en créer un et quand vous spécifiez une chaîne nulle lorsqu'on vous demande les fichiers.
Conclusion
Plus vous en apprenez, meilleurs sont les programmes que vous pouvez créer et élargissez les possibilités d'élaborer des solutions nouvelles et innovantes. Dans ce didacticiel, notre script déjà convivial est devenu encore plus convivial.