Comment écrire un script shell simple sur un VPS (Partie 3)

De Get Docs
Aller à :navigation, rechercher

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.