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

De Get Docs
Aller à :navigation, rechercher

Introduction

La deuxième partie de ce tutoriel vous apprendra plus de commandes de base pour les scripts shell sur un VPS. Ils sont responsables à la fois de l'affichage et de la collecte d'informations vers et depuis l'utilisateur. Cet article a été écrit en supposant que vous avez déjà configuré votre dossier de script shell selon le premier tutoriel.

La commande d'écho

Cette commande vous permet d'afficher des informations pour l'utilisateur. Vous pouvez afficher des chaînes de texte simples, des variables ou les deux ensemble. Il a deux paramètres : -n, qui fait que le texte affiché n'est pas suivi d'une nouvelle ligne, et -e, qui active l'ensemble de « code » suivant à l'intérieur de la chaîne :

\a   - Alert sound
\b   - Backspace character
\c   - Don’t display new line
\e   - Escape character
\n   - New line
\r   - Carriage return
\t   - Horizontal tab
\0xx - ASCII character
\\   - Backslash

Par exemple, les commandes suivantes fonctionnent exactement de la même manière :

echo -e "Text\c"
echo -n "Text"

Pour afficher les variables avec écho, il suffit de l'écrire dans la chaîne précédée du caractère « $ », comme ceci :

string=World!
echo "Hello $string"

Vous pouvez combiner du texte, des commandes et des variables dans une seule chaîne. Vous pouvez même avoir plusieurs lignes de texte dans la même ligne de code simplement en ayant la commande "\n" lorsque vous souhaitez générer une nouvelle ligne.

Texte formaté avec écho

Le texte peut être affiché dans une multitude de couleurs et de styles avec la commande echo. Tout ne fonctionne pas avec tous les clients de terminal, alors gardez à l'esprit que les gens peuvent obtenir des résultats différents de ceux que vous obtenez lors de l'exécution de votre script. Comme ce ne sont que des changements visuels, ce n'est pas un vrai problème la plupart du temps. Chaque personnalisation (rendant le texte en gras, souligné ou coloré) est définie par des séquences d'échappement, un code qui suit le caractère d'échappement (qui est défini par '\e'), comme ceci :

echo -e "This is \e[1mBold"

Voici un petit tableau avec les codes les plus courants :

Bold:            \e[1m
Dim:             \e[2m
Underlined:      \e[4m
Inverted colors: \e[7m

Vous pouvez les mélanger pour créer un texte gras souligné, par exemple, et vous pouvez tout réinitialiser en tapant "\e[0m".

echo -e "\e[4mThis \e[1mis\e[0m \e[7man example \e[0mstring"

Essayez-le et voyez à quoi il ressemble.

Les couleurs sont fondamentalement la même chose. Chaque couleur a un code et elles peuvent être insérées de la même manière que les codes de formatage. Voici un tableau ci-dessous avec les couleurs prises en charge par la plupart des clients terminaux :

Black:         \e[30m (Text) and \e[40m (Background)
Red:           \e[31m (Text) and \e[41m (Background)
Green:         \e[32m (Text) and \e[42m (Background)
Yellow:        \e[33m (Text) and \e[43m (Background)
Blue:          \e[34m (Text) and \e[44m (Background)
Magenta:       \e[35m (Text) and \e[45m (Background)
Cyan:          \e[36m (Text) and \e[46m (Background)
Light gray:    \e[37m (Text) and \e[47m (Background)
Default color: \e[39m (Text) and \e[49m (Background)

Vous pouvez également mélanger les couleurs du texte avec différentes couleurs d'arrière-plan et également ajouter les codes de formatage habituels au texte coloré :

La commande de lecture

Pour obtenir des informations de l'utilisateur, utilisez la commande read. Il stockera tout ce que l'utilisateur tape jusqu'au moment où ENTER est pressé et le stockera dans une variable. Le seul argument est la variable dans laquelle vous souhaitez stocker les informations. Par exemple, il s'agit d'un court script qui crée un dossier avec le nom souhaité par l'utilisateur :

#!/bin/bash
read foldername
mkdir foldername

Mais c'est un script sans aucune sorte d'interface utilisateur. Comment l'utilisateur est-il censé savoir si et quoi il doit taper ?

Exemple de scénario

Dans cet exemple, nous utiliserons tout ce que nous avons appris dans ce didacticiel. Des messages au format personnalisé seront affichés à l'utilisateur et une entrée sera requise. Le premier didacticiel avait un exemple qui sauvegardait les fichiers en fonction des paramètres passés lors de l'invocation du script. Nous allons maintenant le réécrire, en demandant à l'utilisateur ce qu'il veut sauvegarder.

Tout d'abord, nous devons configurer et ouvrir le fichier :

touch ~/bin/filebackup2
chmod +x ~/bin/filebackup2
nano ~/bin/filebackup2

Procéder à la réécriture du script pour qu'il ait une interface :

#!/bin/bash
#Backup script 2.0
#Description: makes a copy of any given file at the backup folder
#Author: Your Name
#Date: 9/19/2013
#Request the backup folder from the user:
echo -e "\e[1m\e[32mFile Backup Utility\n\e[39m\e[0mPlease input your backup folder:"
read BACKUPFOLDER
#The script will make sure the folder exists
mkdir -p $BACKUPFOLDER
#Request files to be backed up:
echo -e "\e[47m\e[30mWhich files do you want backed up?\e[39m\e[49m"
read FILES
cp -a $FILES $BACKUPFOLDER

Conclusion

Ce didacticiel couvre les commandes de base qui vous permettent d'écrire un script avec une interaction utilisateur appropriée, ce qui est crucial pour s'assurer que tout le monde comprend ce que fait le script et le type de données qu'il demande. Tous les scripts ne doivent pas avoir une interface utilisateur ; le premier que nous avons codé est dans la plupart des cas plus rapide et meilleur. Mais même en ligne de commande, seuls les scripts doivent implémenter une interface "help", pour laquelle vous aurez besoin de la commande "echo".