Introduction...3. Objectif...3. Manipulations...3. Les interfaces graphiques...4. Présentation...4. La commande dialog...5. La commande Xdialog...



Documents pareils
Introduction...3. Objectif...3. Manipulations...3. Gestion des utilisateurs et des groupes...4. Introduction...4. Les fichiers de base...

Introduction...3. Objectif...3. Manipulations...3. La Sauvegarde...4. Les différents types...4. Planification...4. Les outils...5

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License,

Votre premier projet Android

Comment sauvegarder ses documents

Manuel d'exploitation de l'application Vitamin version 1.0

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents

Testez votre installation. Créer un répertoire vide

Client windows Nagios Event Log

Comment Définir une Plage de données Pour Utiliser Fonctions de Filtres et de Tris

Comment faire un Mailing A partir d une feuille Calc

INFO-F-404 : Techniques avancées de systèmes d exploitation

OpenOffice.org Calc Ouvrir un classeur

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

Form Designer Guide d utilisateur DOC-FD-UG-FR-01/01/12

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

sshgate Patrick Guiran Chef de projet support

TP1 - Prise en main de l environnement Unix.

WEB page builder and server for SCADA applications usable from a WEB navigator

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

Aide d'active System Console

Manuel de l utilisateur

Comment Accéder à des Bases de Données MySQL avec Windows lorqu'elles sont sur un Serveur Linux

TP 1 Prise en main de l environnement Unix

Procédure de sauvegarde - Cobian Backup


Guide pratique de CSPM, l'outil de suivi des performances du système Version française du Complete System Performance Monitor HOWTO

WiFi Security Camera Quick Start Guide. Guide de départ rapide Caméra de surveillance Wi-Fi (P5)

Les différentes méthodes pour se connecter

Formation VBA 3 Interagir

TD/TP 1 Introduction au SDK d Android

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

8. Gestionnaire de budgets

Déploiement de SAS Foundation

Table des matières. 1. Installation de VMware ESXI Pré-requis Installation... 3

Comment configurer Kubuntu

GUIDE D'UTILISATION DU SYSTEME TELEPHONIQUE POLYCOM

Environnements informatiques

Projet Administration Réseaux

TAGREROUT Seyf Allah TMRIM

Comment faire des étiquettes

Déploiement OOo en environnement Windows Terminal Server

Aide-Mémoire unix. 9 février 2009

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

1. Utilisation du logiciel Keepass

Shell Bash Niveau débutant

Tango go.box - Aide. Table des matières

Listes de validation dans OpenOffice Calc

Installation d'un serveur RADIUS

Pharmed. gestion de pharmacie hospitalière. Installation / déploiement

0.1 Mail & News : Thunderbird

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server

CSI351 Systèmes d exploitation Instructions pour rouler Linux avec Virtual PC dans la salle de labo 2052

2. Cliquez Contact Directory of Public Administration. 5. Tapez le mot de passe - Hello (pour OFPA). Changez le mot de passe en cas de

1 Démarrage de Marionnet

TD séances n 3 et n 4 Répertoires et Fichiers sous Unix

Manuel d utilisation du module Liste de cadeaux PRO par Alize Web

Comment Créer une Base de Données Ab Initio

DOCUMENTATION MODULE BLOCKCATEGORIESCUSTOM Module crée par Prestacrea - Version : 2.0

TP1 : Initiation à l algorithmique (1 séance)

Avant-propos. VERSION Compilation du document à l aide de PDFLATEX Philippe Charlier. 1 Version actuelle : SPIP http ://

Atelier La notion de session utilisateur sous Linux

Installation d'un TSE (Terminal Serveur Edition)

Tutoriel de formation SurveyMonkey

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

SUGARCRM Sugar Open Source Guide d Installation de French SugarCRM Open Source Version 4.2

Exercice sur les Dockers

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

STATISTICA Version 12 : Instructions d'installation

Organiser les informations ( approche technique )

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Publier dans la Base Documentaire

C.M. 1 & 2 : Prise en main de Linux

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

Contents Windows

Vue d ensemble de Windows PowerShell

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Principe de fonctionnement du lanceur d'application "AdisTlsStartCfgLotus"

OpenOffice.org Présentation - Débuter. Distribué par Le projet OpenOffice.org

Ocs Inventory et GLPI s appuie sur un serveur LAMP. Je vais donc commencer par installer les paquets nécessaires.

progecad NLM Guide de l'utilisateur

PROXY SQUID-SQARD. procédure

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

TP JAVASCRIPT OMI4 TP5 SRC

Création de Sous-Formulaires

Procédure d installation de la Sauvegarde de Windows Server

Comment consolider des données

Insérer des images dans Base

PPE GESTION PARC INFORMATIQUE

Introduction aux Systèmes et aux Réseaux

Documentation FOG. Déploiement d images de systèmes d exploitation à travers le réseau.

Universal Robots. Fiche Méthode : Installation du simulateur Polyscope

Notice d'utilisation Site Internet administrable à distance

Utiliser un tableau de données

Asset Management Software Client Module. Manuel d utilisation

Guide Installation Serveur Extensive Testing

Transcription:

Système d'exploitation Sommaire Introduction...3 Objectif...3 Manipulations...3 Les interfaces graphiques...4 Présentation...4 La commande dialog...5 La commande Xdialog...6 Identifier le terminal...7 Récupérer des données...8 Checklist et Textbox...11 Logbox...12 Un script graphique...12 Un kill graphique...13 Annexe 1...14 1

tpos 11 ProgrammationShellScriptUI.odt 27/08/2010 rev.7 thierry.vaira@orange.fr Copyright 2010 tv <thierry.vaira@orange.fr> Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front Cover Texts, and with no Back Cover. You can obtain a copy of the GNU General Public License : write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 1307 USA 2

Système d'exploitation Introduction Introduction Objectif Être capable d'écrire des shell scripts possédant une interface graphique. Manipulations On va travailler dans l'arborescence suivante : $HOME tv TPOS11 Créer l'arborescence de répertoires : $ mkdir p $HOME/tv/TPOS11 Se déplacer dans l'arborescence de travail : $ cd $HOME/tv/TPOS11 3

tpos 11 ProgrammationShellScriptUI.odt 27/08/2010 rev.7 thierry.vaira@orange.fr Les interfaces graphiques Présentation Il est possible d'ajouter une IHM graphique (à base de boîtes de dialogue) pour les shell scripts en utilisant un "dialog program" comme : le package gtkdialogs fournit gchooser, filechooser, gmessage et xtest $ gmessage buttons "Continuer:1,Arreter:0" center print "Test" la commande gdialog (souvent remplacer par zenity) la commande zenity $ zenity question title "Alert" text "Windows a été détecté. Voulez vous le supprimer?" $ find. name '*.sh' zenity title "Search Results" list text="finding all scripts..." column="files" la commande kdialog $ kdialog combobox "Choisir l'os" Linux Windows les commandes dialog (mode console) et Xdialog (mode Xwindow). On utilisera dialog et Xdialog. Les interfaces graphiques 4

Système d'exploitation Les interfaces graphiques La commande dialog L'historique de cette commande se révèle assez compliqué puisque son auteur ayant cessé de la supporter, plusieurs versions ont vu le jour. Plus de détails sur : www.hightek.org/dialog/ Avec la distribution Mandriva, vous trouverez le paquetage cdialog qui correspond à une version de dialog. Pour vérifier sa présence, il suffit de taper dialog pour voir apparaître une aide succinte. Sinon, installer le paquetage : # urpmi cdialog Pour obtenir l'aide complète : $ man dialog Des exemples et la documentation sont disponibles dans : $ ls /usr/share/doc/cdialog * Quelques boîtes de dialogues disponibles : calendar <text> <height> <width> <day> <month> <year> checklist <text> <height> <width> <list height> <tag1> <item1> <status1>... fselect <filepath> <directory> <height> <width> gauge <text> <height> <width> [<percent>] infobox <text> <height> <width> inputbox <text> <height> <width> [<init>] menu <text> <height> <width> <menu height> <tag1> <item1>... msgbox <text> <height> <width> passwordbox <text> <height> <width> [<init>] radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>... tailbox <file> <height> <width> tailboxbg <file> <height> <width> textbox <file> <height> <width> timebox <text> <height> <width> <hour> <minute> <second> yesno <text> <height> <width> Exemple : $ dialog title "Titre" msgbox "Hello world" 0 0 5

tpos 11 ProgrammationShellScriptUI.odt 27/08/2010 rev.7 thierry.vaira@orange.fr La commande Xdialog Plus de détails sur : xdialog.dyns.net. Pour vérifier sa présence, il suffit de taper Xdialog pour voir apparaître une aide succinte. Sinon, installer le paquetage : # urpmi Xdialog Pour obtenir l'aide complète : $ man Xdialog Des exemples et la documentation sont disponibles dans : $ ls/usr/share/doc/xdialog * Quelques boîtes de dialogues disponibles : yesno <text> <height> <width> msgbox <text> <height> <width> infobox <text> <height> <width> [<timeout>] gauge <text> <height> <width> [<percent>] progress <text> <height> <width> [<maxdots> [[ ]<msglen>]] inputbox <text> <height> <width> [<init>] 2inputsbox <text> <height> <width> <label1> <init1> <label2> <init2> 3inputsbox <text> <height> <width> <label1> <init1> <label2> <init2> <label3> <init3> combobox <text> <height> <width> <item1>... <itemn> rangebox <text> <height> <width> <min value> <max value> [<default value>] 2rangesbox <text> <height> <width> <label1> <min1> <max1> <def1> <label2> <min2> <max2> <def2> 3rangesbox <text> <height> <width> <label1> <min1> <max1> <def1>.. <label3> <min3> <max3> <def3> spinbox <text> <height> <width> <min value> <max value> <default value> <label> 2spinsbox <text> <height> <width> <min1> <max1> <def1> <label1> <min2> <max2> <def2> <label2> 3spinsbox <text> <height> <width> <min1> <max1> <def1> <label1>... <min3> <max3> <def3> <label3> textbox <file> <height> <width> editbox <file> <height> <width> tailbox <file> <height> <width> logbox <file> <height> <width> menubox <text> <height> <width> <menu height> <tag1> <item1> {<help1>}... checklist <text> <height> <width> <list height> <tag1> <item1> <status1> {<help1>}... radiolist <text> <height> <width> <list height> <tag1> <item1> <status1> {<help1>}... Les interfaces graphiques 6

Système d'exploitation Les interfaces graphiques buildlist <text> <height> <width> <list height> <tag1> <item1> <status1> {<help1>}... treeview <text> <height> <width> <list height> <tag1> <item1> <status1> <item_depth1> {<help1>}. fselect <file> <height> <width> dselect <directory> <height> <width> calendar <text> <height> <width> <day> <month> <year> timebox <text> <height> <width> Exemple : $ Xdialog title "Titre" msgbox "Hello world" 0 0 Identifier le terminal Technique n 1 : On peut tester la variable d'environnement $DISPLAY : if [ n "$DISPLAY" ] then # en mode graphique, on utilise Xdialog!!! DIALOG="Xdialog" else # en mode console, on dialog!!! DIALOG="dialog" fi $ DIALOG title "Titre" msgbox "Hello world" 0 0 et vérifier que le programme de dialogue est présent : # Quelle IHM utilisée? (version complète) if [ n "$DISPLAY" ] then # en mode graphique, on utilise Xdialog!!! [ z "$DIALOG" a x "`which Xdialog 2>& `" ] && DIALOG="Xdialog" else # en mode console, on dialog!!! [ z "$DIALOG" a x "`which dialog 2>& `" ] && DIALOG="dialog" fi 7

tpos 11 ProgrammationShellScriptUI.odt 27/08/2010 rev.7 thierry.vaira@orange.fr # on n'en a pas trouvé! aie! if [ z "$DIALOG" ] then ERROR="Ce script a besoin d'un \"dialog\" program comme Xdialog ou cdialog..." if [ x "`which gmessage 2>& `" a n "$DISPLAY" ] then gmessage "$ERROR" else echo "$ERROR" fi exit 2 fi Technique n 2 : Il peut s'avérer utile d'identifier le terminal sur lequel s'exécute le script. Pour cela, il faut traiter la variable $TERM qui contiendra le plus souvent : "linux" pour un mode console "xterm" pour un mode Xwindow # Quelle IHM utilisée? case $TERM in xterm) DIALOG="Xdialog stdout title Test";; linux*) DIALOG="dialog stdout title Test";; *) echo "ERREUR: terminal inconnu"; exit 1;; esac $DIALOG msgbox "Hello world!" 0 0 exit 0 Récupérer des données Pour envisager une interaction avec le script, il faut distinguer les deux situations suivantes : validation (OK) ou annulation (CANCEL) d'une boîte de dialogue : il faut alors traiter le code retour $? (OK: $? égal à 0 ou CANCEL: $? égal à 1) soit avec un if (ou un test) soit en créant un groupement de commandes avec ou && récupérer les données manipulées par la boîte de dialogue : il faut alors utiliser la substitution de commande (`commande` ou $(commande)) pour récupérer le résultat dans une variable ou rediriger le flux de sortie vers un fichier et traiter ce fichier par la suite Les interfaces graphiques 8

Système d'exploitation Les interfaces graphiques Exemple 1 : groupement et substitution $(commande) # Réaliser une saisie (INPUTBOX) puis un affichage (MSGBOX) # 1. Saisie d'un nom : un nom par défaut est fourni # on recupère le nom saisi dans la variable nom (ne pas oublier stdout ) # si Annuler alors on sort... nom=$(xdialog backtitle "TP1" stdout title "Test IMPUTBOX" inputbox "Entrez votre nom :" 0 0 "VAIRA Thierry") exit 1 # 2. On affiche le nom saisi Xdialog backtitle "TP1" title "Test MSGBOX" msgbox "Hello $nom" 0 0 exit 0 Exemple 2 : (même chose mais différemment) code retour $? et redirection dans un fichier # Réaliser une saisie (INPUTBOX) puis un affichage (MSGBOX) # on a besoin d'un fichier temporaire fichier_temp=$(mktemp /tmp/$(basename $0).XXXXXX) # on a besoin de le supprimer automatiquement quand le script se termine trap "rm f $fichier_temp" EXIT # 1. Saisie d'un nom : un nom par défaut est fourni # on redirige le nom saisi dans un fichier temporaire Xdialog backtitle "TP1" title "Test IMPUTBOX" stdout inputbox "Entrez votre nom :" 0 0 "VAIRA Thierry" > $fichier_temp # 2. Test $?? case $? in 0) echo "Ok! ";; # on continue... 1) echo "Cancel! " # si Annuler alors on sort... exit 1;; 255) echo "Closed! " # si Fermer alors on sort... exit 255 ;; esac # 3. On récupère la reponse donc le nom saisi nom=$(cat $fichier_temp) # 4. On affiche le nom saisie Xdialog backtitle "TP1" title "Test MSGBOX" msgbox "Hello $nom" 0 0 exit 0 9

tpos 11 ProgrammationShellScriptUI.odt 27/08/2010 rev.7 thierry.vaira@orange.fr Exemple 3 : groupement de plusieurs boîtes de dialogue avec && dlg_cmd="xdialog stdout title Test" # 1. Récupération des données # Si OK sur la première boîte de dialogue # Alors on affiche la deuxième boîte puis les données récupèrées # Sinon on sort date=$($dlg_cmd calendar "Entrez une date" 0 0 0 0 0) && heure=$($dlg_cmd timebox "Entrez une heure" 0 0) exit 1 # 2. Affichage des données récupèrées echo "Date: $date Heure: $heure" exit 0 Exemple 4 : la commande Xdialog permet aussi d'enchaîner plusieurs boîtes de dialogue NAME=`Xdialog stdout title "Boîtes chaînées" \ msgbox "Un exemple de boîtes chaînées" 0 0 \ buttons style text yesno "On continue?" 0 0 \ buttons style icon inputbox "Donner un nom?" 0 0 "" \ msgbox "Terminé!" 0 0` case $? in 0) echo "Ok! ";; 1) echo "Cancel! " exit 1;; 255) echo "Closed! " exit 255 ;; esac if [ "$NAME"!= "" ] ; then echo "Votre nom est \"$NAME\"." fi Remarque : Xdialog permet aussi de faire des boîtes de dialogue de type wizard avec l'option wizard (boîte de dialogue avec les boutons "Précédent" et "Suivant") Les interfaces graphiques 10

Système d'exploitation Checklist et Textbox Checklist et Textbox 1) Transformer le script suivant en version Xdialog. # version cdialog # test d'un choix utilisateur avec # CHECKLIST et affichage d'un texte avec TEXTBOX # on a besoin d'un fichier temporaire TMP=$(mktemp /tmp/reponse.xxxxxx) # on efface le fichier temporaire lorsque le script se termine trap "rm f $TMP" 0 2 5 15 # affiche la boite de dialogue de choix dialog backtitle "Séquence 1" stdout title "Test CHECKLIST" separate output checklist "Selectionner les jours :" 25 30 7 LUN Lundi 0 MAR Mardi 0 MER Mercredi 0 JEU Jeudi 0 VEN Vendredi 0 SAM Samedi 0 DIM Dimanche 0 > $TMP # Test si OK ou CANCEL? case $? in 1) echo "Cancel! " exit 1;; 255) echo "Closed! " exit 255 ;; esac # Affichage avec TEXTBOX du choix utilisateur dialog backtitle "Séquence 1" title "Test TEXTBOX" textbox $TMP 0 0 11

tpos 11 ProgrammationShellScriptUI.odt 27/08/2010 rev.7 thierry.vaira@orange.fr Logbox 2) Tester, puis commenter (#) chaque ligne de ce script. TITLE="$(basename $0)" repertoire=${1: $(pwd)} DIALOG="Xdialog title $TITLE stdout" choixrepertoire=$($dialog dselect $repertoire 0 0) exit 1 # on met des "" à $choixrepertoire pour se protéger des espaces # dans le nom du répertoire du sch "$choixrepertoire" tr '\t' ' ' $DIALOG logbox 0 0 Un script graphique Soit le script fr2en.sh fourni en annexe 1 : $./fr2en.sh Il pleut beaucoup It rains a lot $./fr2en.sh Il pleut beaucoup Ctrl d It rains a lot $ echo "Il pleut beaucoup"./fr2en.sh It rains a lot 3) Intégrer un interface graphique à ce script. Pour terminer, en utilisant exactement le même fichier source, fournir en une seule commande la version, que vous nommerez en2fr.sh, qui traduit par défaut de l'anglais vers le français. Un script graphique 12

Système d'exploitation Un kill graphique Un kill graphique On veut réaliser une commande kill graphique en utilisant une interface graphique. Lorsque le script sera appelé sans paramètre, il affichera tous les processus de l utilisateur et proposera de cocher ceux qu'il désire «tuer». Lorsqu il est appelé avec un paramètre, il "pré cochera en plus les processus qui contiennent ce paramètre comme sous chaîne. Par défaut, tous les processus seront tués avec le signal 15 (ou 9). Pour les tests, utiliser un echo "kill " pour éviter de tuer tout ce qui bouge! Modifier le script pour qu'il accepte un autre numéro de signal. Un exemple est donnée ci dessous : $./tuer.sh 2 bash kill 2 5802 kill 2 5810 4) 13 Fournir le script tuer.sh.

tpos 11 ProgrammationShellScriptUI.odt 27/08/2010 rev.7 thierry.vaira@orange.fr Annexe 1 #!/bin/sh # # Traduction avec Google # # Author: Erick Gallesio [eg@essi.fr] # Creation date: 11 Nov 2007 21:03 (eg) # Last file update: 12 Oct 2008 23:40 (eg) # # modification du filtrage suite au changement # de l'outil de traduction Google (voir remarques) # # Author: Thierry Vaira [thierry.vaira@orange.fr] # Creation date: 02 Jan 2009 # Last file update: 02 Jan 2009 # Version finale (avec awk) # Remarques : # avant, la traduction se trouvait entre ces deux balises : # balise1='<div id=result_box dir="ltr">' # balise2='</div>' # le script initial utilisait donc les commandes suivantes # pour extraire la traduction : # wget... grep "$balise1" sed e "s/.*$balise1//" sed e "s=$balise2.*==" # maintenant, la traduction est formatée comme suit dans la page HTML renvoyée : # exemple : pour 'jaune ' > 'yellow' # <span title="jaune" onmouseover="this.style.backgroundcolor='#ebeff9'" onmouseout="this.style.backgroundcolor='#fff'">yellow</span> # scriptname=$(basename $0) case $scriptname in fr2en.sh) from="fr"; to="en";; *) from="en"; to="fr";; esac phrase='' Annexe 1 14

Système d'exploitation Annexe 1 while [ $# gt 0 ] do case $1 in from) from=$2; shift 2;; to) to=$2; shift 2;; *) phrase="$phrase $1"; shift;; esac done if [ "$phrase" = "" ] then # Pas de phrase sur la ligne de commande => lire depuis stdin phrase=$(cat) fi phrase=$(echo "$phrase" sed e "s/ /%20/g") # traduire() { url="http://translate.google.com/translate_t? text=$phrase&sl=$from&tl=$to&ie=8859 1" wget q U "" O $url awk '{match($0, /<span[^>]*title=\"[^\"]+\"[^>]*>([^<]*) <\/span>/, a); print a[1]}' sed '/^$/d' # suppression de toutes les lignes vides } # traduire $from $to "$phrase" 15