Ecrire un script bash interactif avec saisie par l’utilisateur

Capture script bash interactifAprès mes premiers posts relatifs aux boucles while, for, expressions rationnelles, voici une utilisation combinée de ces petits scripts, pour construire un simple script interactif en BASH.

Le script utilisé ici est axé sur l’aspect didactique, permettant d’être utilisé comme une référence simple et facile pour écrire un script BASH interactif.

Ce script va dans l’ordre :
– Demander combien de saisies sont attendues
– Vérifier que les réponses sont cohérentes et non vides
– Stocker les résultat dans un tableau associatif (array) en variable
– Afficher le contenu du tableau associatif

[bash]
#!/bin/bash
# Ce script permet d’afficher un tableau suite a une saisie de liste simple
# Alexandre BLANC – http://blog.inforeseau.com – 11/2010

#Jusqu’a ce que la reponse soit composée par un nombre, j’attends la saisie
until [[ ${nombre} =~ ^[0-9]+$ ]]; do
echo "Combien de personnes a saisir ?"
read nombre
done

#Du nombre saisi jusqu’a 1 inclus, je vais executer
for (( i=${nombre}; i>=1; i– ))
do

#Tant que la variable est vide, j’attends la saisie
while [ -z ${nom[$i]} ]; do
echo "Veuillez saisir votre nom"
read nom[$i]
done

echo "Bienvenue ${nom[$i]}"

#Jusqu’a ce que la variable ne soit pas vide, j’attends la saisie
until [ ! -z ${prenom[$i]} ]; do
echo "Veuillez saisir votre prenom"
read prenom[$i]
done

echo "Ajouté ${prenom[$i]} ${nom[$i]}, on continue, plus que $i !"

done

echo "Listing de la totalité des noms :"

#Affiche tout le contenu du tableau (array) contenu dans la variable nom
echo ${nom[*]}

echo "Listing de la totalité du tableau associatif :"
for (( i=1; i<=${nombre}; i++ ))
do

echo ${prenom[$i]} ${nom[$i]}

done
#Sources :
#http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html
#http://tldp.org/LDP/abs/html/refcards.html#AEN21811
#http://www.linuxquestions.org/questions/programming-9/bash-scripting-check-for-numeric-values-352226/
#http://tldp.org/LDP/abs/html/arrays.html
[/bash]

Les points intéressants de ce script sont les différentes boucles utilisées (until, for, while), la lecture interactive de variables par l’utilisateur (read), le test de validation sur la première réponse, à l’aide de l’expression rationnelle (ou expressions régulières, regexp) pour s’assurer que la réponse est bien numérique.

Pour tester ce script, copier le contenu dans un fichier que vous nommerez par exemple « interactif.sh », auquel vous donnerez les droits d’exécution :
[bash]chmod +x interactif.sh[/bash]

Puis on le lance simplement :
[bash]./interactif.sh[/bash]

Sources :
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html
http://tldp.org/LDP/abs/html/refcards.html#AEN21811
http://www.linuxquestions.org/questions/programming-9/bash-scripting-check-for-numeric-values-352226/
http://tldp.org/LDP/abs/html/arrays.html

Loading

Tags: , , , , , , , , ,

samedi, novembre 6th, 2010 Bash, GNU - Linux

5 Commentaires to Ecrire un script bash interactif avec saisie par l’utilisateur

  • hornetbzz dit :

    ton tableau n’est pas associatif, ce sont juste 2 vecteurs (array) simples et juxtaposés…

  • tresronours dit :

    Donc pour répondre au commentaire voici un lien vers article sur les tableaux associatifs en BASH :
    http://www.admin-linux.fr/?p=2724

    Au moins, ça donne une information plus intéressante que « ton tableau n’est pas associatif » ;) et comme ça tout le monde apprend.

  • Guy Carignan dit :

    Très bel exemple. Merci beaucoup.

  • sylla dit :

    salut je veut ecrir un script shell qui permet de creer un utilisateur en interactive

    • tresronours dit :

      Salut, basé, pour ca je ferais appel dans un script bash a la commande adduser (ou useradd), en demandant le username voulu, le password, puis je lancerais adduser mon-user -p mon-password
      ou j’aurai demandé le username chargé dans une varialbe avec read mon-user; et read -s mon-password pour le mot de passe (read -s lit la valeur sans l’afficher).
      Voila une piste.

  • Laisser un commentaire à tresronours

    Not f'd — you won't find me on Facebook
    novembre 2010
    L M M J V S D
    1234567
    891011121314
    15161718192021
    22232425262728
    2930  
     

     
    Suivez moi sur twitter - follow me on twitter
     
    Follow on LinkedIn
    [FSF Associate Member]
     
    Free Software, Free Society
    VIRTUALISATION :
    Compacter une image virtualbox VDI
    Bon petit tutoriel esxi
    Marche d'appliances vmware
    Installer ESXi sur un disque IDE
    Installer ESXi 3.5 sur un disque USB
    Installer proxmox avec DRBD et migration / réplication à chaud
    Installer OSSEC avec VMware
    Information sur le VDI
    SECURITE - FIREWALL :
    Ouvrir des ports dynamiquement iptables - knockd
    Autre tres bon tuto knockd
    Docs Arp poisoning - Anglais
    Metasploit test de pénétration
    Zone H - sites piratés en temps réel
    Blog invisible things
    Tips protection sécurité wordpress
    Pfsense - distribution firewall opensource - adsl internet failover
    Iproute 2 mini how to - linux advanced routing
    ClearOS - la passerelle sécuritaire lan - wan
    HAUTE DISPONIBILITE :
    CDN - Accélération de la distribution de données
    drbd iscsi ocfs2 dm multipath tutoriel
    Load balancing LVS
    Load balancing opensource list
    HA-Proxy :
    HAproxy - http load balancer
    Simple tutoriel HAproxy
    HAproxy - debian tutoriel
    Centos - Ip failover
    Configuratoin DM-Multipath Redhat
    VMware Doubletake - continuité
    Quelques liens sur la réplication MySQL : Manuel MySQL, chapitre sur la réplication
    Manuel MySQL, Tutoriel clair sur la mise en place
    Autre tuto sur la mise en place de la réplication MySQL
    Références pour optimisation du serveur MySQL
    Utilisation de EXPLAIN mysql pour optimiser vos bases
    optimiser vos bases - requetes et index
    STOCKAGE RESEAU :
    Un outil de clonage disque en reseau
    Internet NAS 250Go 250 accès VPN
    Server ISCSI avec Ubuntu tuto
    ISCSI centos redhat tutoriel
    Gérer et étendre un LVM
    Créer sa piratebox ! trop cool
    Deaddrops, les clés USB dans les murs, aussi cool !
    OPTIMISATION WORDPRESS :
    Télécharger Xenu
    Comment utiliser Xenu
    optimisation hébergement wordpress
    Super howto wordpress (En)
    Test de charge serveur web - Load impact
    VPN - ROUTEUR - LAN:
    Zeroshell - le mini-routeur wifi tout en un
    Retroshare, votre réseau d'échange crypté!
    Openvpn sur centos redhat
    Intégrer Linux dans active directory
    Routage inter-vlan avec Linux
    Routage avec OSPF
    Network Weathermap
    TENDANCES - WEB:
    Boutons twitter
    Analyser les tendances des recherches Google
    Protocole sitemap - robots.txt
    Creer des animations CSS3
    Code php pour interagir avec twitter
    E reputation
    Jquery
    TRUCS ET ASTUCES GNU/LINUX :
    Tuxmachines.org - Actus et tips linux
    Configurer GRUB2 et grub2 ici
    Panoet - en anglais - tips & tricks
    Readylines tips and trick pertinents
    Squid Clamav - proxy antivirus
    Apprendre Unix en 10 minutes
    13 tips sur les expressions régulières
    IE Sous linux IES
    LDAP 2.4 Quickstart guide
    Tutoriel LDAP
    Installation annuaire LDAP
    Serveur Mail Postfix - Dovecot - LDAP - MDS
    Créer un linux personnalisé en ligne - custom linux
    Super site sur linux - en
    Capistrano - déploiement automatisé
    MONITORING :
    Nagios tutoriel et doc
    Nagios plugin NRPE tuto
    Nagios plugin NRPE autre tuto
    Nagios plugin NRPE officiel
    Zabbix - fonctionnalités
    Zabbix - installation
    Guide MRTGsys - grapher la charge locale
    MRTGsys - ajouter des graphs
    MRTGsys - interpréter les données
    Shinken - Monitoring
    Thruk Monitoring webinterface
    Shinken - Tutoriel
    Shinken - Référence chez Nicolargo
    AUTRES LIENS :
    RemixJobs IT jobs
    USB Multiboot
    Reset mot de passe windows
    Java python et autres tips, intéressant !
    Forum inforeseau
    Open Clipart
    Excellent comic en ligne
    Inforeseau.fr