GNU/Linux >> Tutoriels Linux >  >> Linux

Ajout d'une interface graphique simple aux scripts shell Linux avec kdialog

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 :

Types de kDialog
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 :

  • Les boîtes de dialogue Menu et Radiolist permettent de sélectionner une option.

  • La boîte de dialogue Liste de contrôle permet de sélectionner une, plusieurs ou toutes les options.

  • La boîte de dialogue Combobox permet de sélectionner une option à l'aide d'un menu déroulant.

Boîtes de dialogue de sélection de fichiers

L'utilisateur peut sélectionner une partie du système de fichiers, notamment :

  • Sélectionnez les fichiers existants, avec la possibilité de filtrer par nom ou type de fichier

  • Saisissez un nouveau fichier à enregistrer/mettre à jour

  • Répertoires

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.


Linux
  1. Faites des calculs dans le shell Linux avec GNU bc

  2. Principes de base de Linux :comment télécharger des fichiers sur le shell avec Wget

  3. Commandes Linux les plus simples avec 10 exemples

  4. Pourquoi exécuter une commande shell Linux avec '&' ?

  5. Comment Linux gère-t-il les scripts shell ?

Comment créer des boîtes de dialogue GUI dans des scripts Bash avec Zenity sous Linux et Unix

Comment créer des boîtes de dialogue GUI dans des scripts Bash avec Whiptail sous Linux

Shell Scripting pour les débutants - Comment écrire des scripts Bash sous Linux

Des moyens simples pour générer un mot de passe aléatoire sur Linux Shell

50 commandes de coupe Linux simples et utiles sous Unix avec des exemples

Ajout de nouveaux utilisateurs sous Linux avec la commande Useradd