Les scripts shell sont des choses incroyablement utiles. Ils vous permettent de faire quelque chose d'aussi simple que de créer une commande simple pour remplacer une commande plus difficile avec beaucoup d'indicateurs, de regrouper de nombreuses commandes complexes à exécuter à partir d'une tâche cron. Ils sont formidables car vous pouvez les déclencher rapidement dans votre terminal préféré, mais dans certains cas, ils vous obligent à vous souvenir de combinaisons spécifiques de drapeaux ou d'options. Si vous vous trouvez dans cette situation, vous pouvez ajouter quelques boîtes de dialogue GUI simples pour vous aider à accélérer votre chemin à travers la tâche à accomplir.
Pour utiliser ce didacticiel, vous aurez besoin des éléments suivants :
-
Accès à un shell de type Unix (ceci est écrit avec bash à l'esprit).
-
Les systèmes d'exploitation macOS et *nix (comme Linux) devraient être livrés avec celui-ci ou un autre similaire.
-
Sous Windows, vous pouvez installer l'environnement CygWin, ou sur les versions récentes de Windows 10, utilisez le "Sous-système Windows pour Linux"
-
Les bibliothèques de base pour l'environnement de bureau KDE. Vous n'avez pas besoin de tout, surtout si vous avez déjà installé un autre DE.
L'installation de kdialog ne devrait être nécessaire que si vous avez commencé avec un environnement de bureau autre que KDE, et vous n'avez pas d'autres applications KDE sur votre machine. Il fait partie du package kde-baseapps-bin sur Ubuntu, ce qui signifie qu'il est installé par défaut sur Kubuntu. Sur d'autres dérivés, vous pouvez l'installer avec la commande suivante au niveau du terminal :
Installation de kdialog depuis le terminal.
sudo apt-get install kde-baseapps-bin
Cela entraînera probablement une installation importante, car d'autres bibliothèques et packages KDE seront installés en même temps. Mais bon, l'espace disque dur est bon marché, n'est-ce pas ?
Étant donné que les scripts sont (en général) censés faire les choses automatiquement, nous n'aurons besoin d'afficher cette boîte de dialogue que dans les situations suivantes :
-
Si nous avons besoin de capturer une sorte d'entrée de l'utilisateur, ou ;
-
Si nous voulons montrer à l'utilisateur une sorte de rétroaction d'une manière visible (c'est-à-dire pas seulement du texte craché sur la ligne de commande).
Prenons l'exemple de l'utilisation d'une commande pour [sauvegarder votre site Drupal à l'aide de drush]. Bien sûr, puisque vous êtes un entrepreneur Internet en herbe, vous n'avez pas qu'un seul site Drupal... ? vous en avez trois. Vous préférez ne pas avoir à exécuter de commandes distinctes lorsque vous souhaitez sauvegarder tous vos sites, mais en même temps, vous ne voulez pas avoir à vous souvenir d'un long chemin si vous souhaitez prendre un instantané d'un seul. Nous pouvons utiliser quelques boîtes de dialogue pour nous aider en :
-
Présentez à l'utilisateur une liste de sites que nous pouvons sauvegarder, et à lui de faire un choix, et ;
-
Montrez à l'utilisateur un message confirmant le résultat, qu'il s'agisse d'un succès ou d'un échec.
kDialog fonctionne en l'appelant sur la ligne de commande avec un type de dialogue , tous les paramètres requis par ce type et toutes les autres options telles qu'un titre de boîte de dialogue.
Il existe une grande variété de types de dialogues parmi lesquels choisir en fonction de vos besoins, comme suit :
Type de dialogue | Exemple d'image | Description |
---|---|---|
Boîtes de message d'information | ![]() | Affiche une boîte avec un bouton "OK" pour fermer, fournissant un message texte et une information "non critique", un avertissement ou une icône d'erreur. |
Pop-up passif | ![]() | Cela affiche un message qui disparaîtra en quelques secondes, c'est-à-dire qu'il n'est pas nécessaire que l'utilisateur le ferme ou le rejette. |
Boîte de message Oui/Non | ![]() | Comme les "Boîtes de message d'information", cela affiche une boîte de dialogue avec une icône d'information/avertissement/erreur qui fournira également à l'utilisateur la sélection de "Oui" ou "Non". |
Boîtes de dialogue de saisie | ![]() | Cela fournit une seule boîte dans laquelle l'utilisateur peut taper du texte. |
Boîtes d'affichage de fichiers | ![]() | Cela affichera le contenu d'un fichier (texte brut) dans une boîte de dialogue. |
Boîtes de dialogue de menu et de sélection | ![]() | Cela fournit une boîte de dialogue avec une liste d'éléments, permettant à l'utilisateur d'effectuer une ou plusieurs sélections :
|
Boîtes de dialogue de sélection de fichiers | ![]() | L'utilisateur peut sélectionner une partie du système de fichiers, notamment :
|
Boîtes de dialogue de progression | ![]() | L'utilisateur peut combiner kDialog avec la commande dcop pour créer une boîte de dialogue qui informe l'utilisateur de la progression d'une opération. |
En examinant les options ci-dessus, deux d'entre elles semblent avoir du potentiel :
-
La "boîte de dialogue Liste de contrôle" nous permettra de sélectionner un ou tous nos sites à sauvegarder.
-
La "boîte de message d'information" peut être utilisée pour afficher si chacun d'entre eux a réussi ou échoué.
Compte tenu de ces options, nous pouvons imaginer que notre script ressemble à ceci :
SITE1 is located HERE (make these full paths, not relative paths)
SITE2 is located THERE
SITE3 is located IN ANOTHER PLACE
display a kDialog with SITE1, SITE2, and SITE3 as options
and tell me which one(s) the user picks
for each one the user picked:
run +drush ard+ on that site, and
record whether it was successful or not.
display another +kDialog+ with each of those results.
Gardant cela à l'esprit, plongeons dedans.
La première chose à faire est d'assembler la commande drush que nous voulons appliquer à chaque site lorsqu'il est sélectionné. Supposons que tous les sites se trouvent sur le même hôte Web dans des répertoires différents, mais nous souhaitons stocker les sauvegardes dans un répertoire de "sauvegarde" commun. Nous pouvons utiliser les éléments suivants :
cd SITE
drush ard --destination=/home/user/backup/SITENAME.tar.gz
Donc, en utilisant vos connaissances sur la définition des variables et des boucles for, nous pouvons créer ce script comme suit :
#! /bin/bash
// Note: create variables to hold paths to all the sites
PERSONALSITE='/home/www/mypersonalsite/'
BUSINESSSITE='/home/www/mybusinesssite/'
HOBBYSITE='/home/www/myhobbysite/'
// Note: create variable to hold path to the destination
DESTINATION='/home/user/backup'
// Note: display a dialog asking the user to select which sites to back-up
CHOICES=$(kdialog --checklist "Select sites to back-up:" 1 "Personal site" off 2 "Business Site" off 3 "Hobby site" off)
// Note: log a success/failure message for each of the choices returned from dialog
for each in $CHOICES
do
case {
1)
cd $PERSONALSITE
drush ard --destination=$DESTINATION/mypersonalsite.tar.gz
if [$?=="0"]
then
RESULTS += "Personal site backup: Succeeded\n"
else
RESULTS += "Personal site backup: Failed\n"
fi
2)
cd $BUSINESSSITE
drush ard --destination=$DESTINATION/mybusinesssite.tar.gz
if [$?=="0"]
then
RESULTS += "Business site backup: Succeeded\n"
else
RESULTS += "Business site backup: Failed\n"
fi
3)
cd $HOBBYSITE
drush ard --destination=$DESTINATION/myhobbysite.tar.gz
if [$?=="0"]
then
RESULTS += "Hobby site backup: Succeeded\n"
else
RESULTS += "Hobby site backup: Failed\n"
fi
esac
// NOTE: display a dialog with the results of all the backup operations.
kdialog --msgbox $RESULTS
Si nous sauvegardons cela et que nous pouvons l'exécuter comme décrit dans le premier article de la série Bash, nous pourrons exécuter une seule commande, obtenir une boîte de dialogue facile à utiliser pour choisir notre site, puis voir une belle fenêtre de rapport comment tout s'est passé.
Bien que ce script puisse certainement être optimisé de plusieurs manières, il montre comment vous pouvez utiliser kdialog pour collecter des entrées d'utilisateurs et afficher des résultats en exécutant un seul programme dans votre script.