Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 30-01-2016 11:59:01

deuchdeb
Moderato ma non troppo
Lieu : Pays de Cocagne
Distrib. : Jessie 8 + backports
Noyau : linux-image-3.16
(G)UI : KDE4.14 - Mate
Inscription : 13-01-2010

(Résolu) Cherche commande bash Oui - Non

Bonjour,

J'ai fait un script bash pour la sauvegarde des répertoires utilisateur vers un disque USB.
Cela fonctionne bien.

Le sript fait dans un 1er temps une simulation et si tout va bien et que je veux faire la sauvegarde je choisis 1 sinon je choisis sur 0 et c'est fini.

Je voudrais que à la place des chiffres 1 ou 0, on puisse entrer les lettres O (oui) ou N (non). Mais je n'y arrive pas.

Voici le script.

#!/bin/bash

echo 'SIMULATION SAUVEGARDE DOCUMENT VERS DisqueUSB'
rsync -r -t -v -n --progress --modify-window=1 -l -s "/home/utilisateur/Documents/" "/media/utilisateur/DisqueUSB/home/Mes Documents/Documents/"
echo 'SIMULATION SAUVEGARDE IMAGES VERS DisqueUSB'
rsync -r -t -v -n --progress --modify-window=1 -l -s "/home/utilisateur/Images/" "/media/utilisateur/DisqueUSB/home/Mes Documents/Images/"
echo 'SIMULATION SAUVEGARDE MUSIQUE VERS DisqueUSB'
rsync -r -t -v -n --progress --modify-window=1 -l -s "/home/utilisateur/Musique/" "/media/utilisateur/DisqueUSB/home/Mes Documents/Musique/"
echo 'SIMULATION SAUVEGARDE VIDEOS VERS DisqueUSB'
rsync -r -t -v -n --progress --modify-window=1 -l -s "/home/utilisateur/Vidéos/" "/media/utilisateur/DisqueUSB/home/Mes Documents/Vidéos/"

echo 'SIMULATION TERMINEE'


echo "Doit-on faire la sauvegarde (1 = oui / 0= non) ?"
read Variable # saisie de la variable
if test $Variable -eq 1 # si Variable vaut 1

then # alors
    echo 'SAUVEGARDE DOCUMENT VERS DisqueUSB'
    rsync -r -t -v --progress --modify-window=1 -l -s "/home/utilisateur/Documents/" "/media/utilisateur/DisqueUSB/home/Mes Documents/Documents/"
    echo 'SAUVEGARDE IMAGES VERS DisqueUSB'
    rsync -r -t -v --progress --modify-window=1 -l -s "/home/utilisateur/Images/" "/media/utilisateur/DisqueUSB/home/Mes Documents/Images/"
    echo 'SAUVEGARDE MUSIQUE VERS DisqueUSB'
    rsync -r -t -v --progress --modify-window=1 -l -s "/home/utilisateur/Musique/" "/media/utilisateur/DisqueUSB/home/Mes Documents/Musique/"
    echo 'SAUVEGARDE VIDEOS VERS DisqueUSB'
    rsync -r -t -v --progress --modify-window=1 -l -s "/home/utilisateur/Vidéos/" "/media/utilisateur/DisqueUSB/home/Mes Documents/Vidéos/"
    echo "SAUVEGARDE TERMINEE"
 else
    echo "Au Revoir"    
fi # fin du bloc if
#read

Hors ligne

#2 30-01-2016 12:06:51

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Re : (Résolu) Cherche commande bash Oui - Non

Voilà le test :


if [ "$Variable" = "O" ]; then
#lalalala
fi
 


smile


YA3HGA-H

Hors ligne

#3 30-01-2016 12:19:23

greenmerlin
Membre
Lieu : 127.0.0.1
Distrib. : Archlinux/TinycoreLinux(CorePure 64-6.4.1)/Jessie
Noyau : 4.2.2-1 / 4.4
(G)UI : wmaker
Inscription : 23-01-2016

Re : (Résolu) Cherche commande bash Oui - Non

Le plus simple reste


read -p "Oui ou Non : " reponse



poste la question OUi NON et stocke la réponse dans la variable ${reponse} en bash


" La plus importante et la plus négligée de toutes les conversations, c'est l'entretien avec soi-même. "
Chancelier Oxenstiern.

536920766f7573206172726976657220c3a0206c69726520c3a7612c20632765737420717565206e6f757320706172746167656f6e73206c6573206dc3aa6d65732063656e747265732064e28099696e74c3a972c3aa74732e

Hors ligne

#4 30-01-2016 12:24:52

deuchdeb
Moderato ma non troppo
Lieu : Pays de Cocagne
Distrib. : Jessie 8 + backports
Noyau : linux-image-3.16
(G)UI : KDE4.14 - Mate
Inscription : 13-01-2010

Re : (Résolu) Cherche commande bash Oui - Non

Merci, je vais testé ces solutions. cool

Hors ligne

#5 30-01-2016 12:28:20

Severian
Membre
Distrib. : Debian GNU/Linux 8.6 (jessie)
Noyau : Linux 4.6.0-0.bpo.1-amd64
(G)UI : Openbox 3.6.1-2
Inscription : 13-12-2014

Re : (Résolu) Cherche commande bash Oui - Non

echo -n 'Doit-on faire la sauvegarde ? (o/n) '
read maj
if [ "$maj" = o ] || [ "$maj" = O ] || [ "$maj" = oui ] || [ "$maj" = OUI ] ; then
......
fi


"il est urgent d'attendre" (bendia)
ob3-debian2-150x50.png

Hors ligne

#6 30-01-2016 12:38:33

greenmerlin
Membre
Lieu : 127.0.0.1
Distrib. : Archlinux/TinycoreLinux(CorePure 64-6.4.1)/Jessie
Noyau : 4.2.2-1 / 4.4
(G)UI : wmaker
Inscription : 23-01-2016

Re : (Résolu) Cherche commande bash Oui - Non

Severian a écrit :

echo -n 'Doit-on faire la sauvegarde ? (o/n) '
read maj
if [ "$maj" = o ] || [ "$maj" = O ] || [ "$maj" = oui ] || [ "$maj" = OUI ] ; then
......
fi




read -p "Doit-on faire la sauvegarde ? (o/n)" maj
if [[ ${maj} = [Oo] ]]; then
....
fi
 


" La plus importante et la plus négligée de toutes les conversations, c'est l'entretien avec soi-même. "
Chancelier Oxenstiern.

536920766f7573206172726976657220c3a0206c69726520c3a7612c20632765737420717565206e6f757320706172746167656f6e73206c6573206dc3aa6d65732063656e747265732064e28099696e74c3a972c3aa74732e

Hors ligne

#7 30-01-2016 12:59:54

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : (Résolu) Cherche commande bash Oui - Non

Je propose une solution qui utilise les possibilités de correspondance avec une expression
rationnelle. Ça ne marche pas avec les versions de bash < 3.0, la version proposée
en Jessie devrait donc possédée cette fonctionnalité.


regex="^[Oo]([Uu][Ii])?$"
read -p "Doit-on faire la sauvegarde ? (o/n) : " maj
if [[ "$maj" =~ $regex ]]; then
    echo on fait la sauvegarde
fi
 



Donc il faut répondre soit O ou OUI, et tout ceci étant insensible à casse.
Donc O, o, Oui, OUI, oUI, etc conviendront mais pas « ou » par exemple wink


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#8 30-01-2016 14:57:02

greenmerlin
Membre
Lieu : 127.0.0.1
Distrib. : Archlinux/TinycoreLinux(CorePure 64-6.4.1)/Jessie
Noyau : 4.2.2-1 / 4.4
(G)UI : wmaker
Inscription : 23-01-2016

Re : (Résolu) Cherche commande bash Oui - Non

enicar a écrit :

Je propose une solution qui utilise les possibilités de correspondance avec une expression
rationnelle. Ça ne marche pas avec les versions de bash < 3.0, la version proposée
en Jessie devrait donc possédée cette fonctionnalité.


regex="^[Oo]([Uu][Ii])?$"
read -p "Doit-on faire la sauvegarde ? (o/n) : " maj
if [[ "$maj" =~ $regex ]]; then
    echo on fait la sauvegarde
fi
 



Donc il faut répondre soit O ou OUI, et tout ceci étant insensible à casse.
Donc O, o, Oui, OUI, oUI, etc conviendront mais pas « ou » par exemple wink



Magnifique
big_smile


" La plus importante et la plus négligée de toutes les conversations, c'est l'entretien avec soi-même. "
Chancelier Oxenstiern.

536920766f7573206172726976657220c3a0206c69726520c3a7612c20632765737420717565206e6f757320706172746167656f6e73206c6573206dc3aa6d65732063656e747265732064e28099696e74c3a972c3aa74732e

Hors ligne

#9 30-01-2016 18:12:19

Arnaud
Membre
Lieu : Allemagne
Distrib. : Debian Sid
Noyau : Linux 4.3.0-1-amd64
(G)UI : Xfce
Inscription : 09-11-2012

Re : (Résolu) Cherche commande bash Oui - Non

Merci enicar, belle solution wink

Hors ligne

#10 30-01-2016 19:30:39

phlinux
Membre
Lieu : S-M
Distrib. : Jessie
Noyau : 4.6
(G)UI : Openbox (+Rox+Feh)
Inscription : 10-05-2009

Re : (Résolu) Cherche commande bash Oui - Non

@ enicar : classe la variable

Je me permet de "bernacler" le fil (désolé @deuchdeb), mais j'ai besoin du même genre de combine là >> https://debian-facile.org/viewtopic.php?id=8610

Pages perso : feh, omegat, udisks, sa station de travail comme passerelle

Hors ligne

#11 30-01-2016 20:34:00

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : (Résolu) Cherche commande bash Oui - Non

/me se demande si on peut pas rafler un point choco bernacle là ?
La moitié d'un peut-être ? big_smile

"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#12 30-01-2016 20:40:48

deuchdeb
Moderato ma non troppo
Lieu : Pays de Cocagne
Distrib. : Jessie 8 + backports
Noyau : linux-image-3.16
(G)UI : KDE4.14 - Mate
Inscription : 13-01-2010

Re : (Résolu) Cherche commande bash Oui - Non

@phlinux: Ce n'est pas un "bernacle" mais un subtile aiguillage dans les règles de l'art.

@smolski: Donc pas de point chocolat. Na!!!

De toute façon de mon côté, j'ai déjà là de quoi bien m'amuser.

Je vous tiens au courant.

Hors ligne

#13 31-01-2016 11:09:08

Philou92
Adhérent(e)
Lieu : Hauts de Seine
Distrib. : Debian Jessie 8.6
Noyau : Linux 3.16.0-4-amd64
(G)UI : Gnome 3.14
Inscription : 29-04-2015

Re : (Résolu) Cherche commande bash Oui - Non


regex="^[Nn]([Oo][Nn])?$"
read -p "Doit-on donner la moitié de nos points chocolat à Smolski? (o/n) : " maj
if [[ "$maj" =~ $regex ]]; then
    echo "on garde nos choco"
fi
 

Dernière modification par Philou92 (31-01-2016 14:10:25)

Hors ligne

#14 31-01-2016 11:31:53

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : (Résolu) Cherche commande bash Oui - Non

Pour les points chocos, j'utiliserais plutôt ce code :


read -p "Doit-on donner la moitié de nos points chocolat à Smolski? (o/n) : "
echo "Non mais, ça ne va pas, on garde tous nos points chocos !"
 


big_smile

Dernière modification par enicar (31-01-2016 11:32:23)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#15 31-01-2016 12:01:45

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : (Résolu) Cherche commande bash Oui - Non

Pour être complet, on peut faire la même chose à base de grep :


#! /bin/bash
read -p "Doit-on faire la sauvegarde ? (o/n) : " maj
if echo "$maj" |grep -q -E -i '^o(ui)?$'; then
    echo On fait la mise à jour
else
    echo On ne fait pas la mise à jour
fi
 



Et comme le sujet du fil est d'avoir une fonction oui/non
on peut mettre tout cela dans une fonction :


#! /bin/bash
oui_non()
{
    if echo "$1" |grep -q -E -i '^o(ui)?$'; then
        return 0
    else
        return 1
    fi
}

read -p "Doit-on faire la sauvegarde ? (o/n) : " maj

if oui_non "$maj"; then
    echo On fait la mise à jour
else
    echo On ne fait pas la mise à jour
fi
 


Bon, je pense que le sujet est résolu, non ? big_smile


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#16 31-01-2016 19:43:02

deuchdeb
Moderato ma non troppo
Lieu : Pays de Cocagne
Distrib. : Jessie 8 + backports
Noyau : linux-image-3.16
(G)UI : KDE4.14 - Mate
Inscription : 13-01-2010

Re : (Résolu) Cherche commande bash Oui - Non

En effet cela fonctionne avec la fonction oui_non.

@enicar: peux tu nous expliquer ce petit bout de code:

grep -q -E -i '^o(ui)?$'

Hors ligne

#17 31-01-2016 20:15:08

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : (Résolu) Cherche commande bash Oui - Non

deuchdeb a écrit :

@enicar: peux tu nous expliquer ce petit bout de code:


grep -q -E -i '^o(ui)?$'
 



Oui bien sûr wink
On commence par les options de grep :

  • -q : n'affiche pas les résultats, dit nous seulement si il y a correspondance.

  • -E : utilise des motifs étendus (car c'est plus simple).

  • -i : la correspondance est insensible à la casse.


J'utilise des motifs étendus car dans les motifs de base il faut
rajouter des \ à tout bout de champ…
L'expression rationnelle '^o(ui)?$', je la mets entre
apostrophes simples pour éviter que le shell ne les interprête.

  • ^ : début de chaine.

  • o : le caractère o

  • (ui)? : est une sous expression :
       

    • ( : debut de sous expression

    • ui : la chaîne ui

    • ) : fin de la sous expression

    • ? : quantificateur qui veut dire zéro ou une fois le caractère ou la sous expression qui le/la précède.

  • $ : fin de chaine.


Dit en français, je demande une chaine qui commence par un « o » et
qui peut être suivit par « ui  » ou non.
voilà smile

Dernière modification par enicar (31-01-2016 20:15:49)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#18 01-02-2016 02:06:38

Patriboom
Membre
Lieu : Arctique canadien
Distrib. : Jessie
Noyau : Linux 3.16.0-4-686-pae
(G)UI : MATE
Inscription : 25-12-2008
Site Web

Re : (Résolu) Cherche commande bash Oui - Non

Ça fait mon bonheur aussi.
Merci.

Portez la paix
Patrick Allaire, ptre

Hors ligne

#19 01-02-2016 15:14:24

deuchdeb
Moderato ma non troppo
Lieu : Pays de Cocagne
Distrib. : Jessie 8 + backports
Noyau : linux-image-3.16
(G)UI : KDE4.14 - Mate
Inscription : 13-01-2010

Re : (Résolu) Cherche commande bash Oui - Non

Super pour cette explication de texte très détaillée, j'ai tout compris. cool

Je remarque quand même que l'on peut arriver à une même destination en empruntant de nombreuses routes.
Et rien qu'avec un script bash !!!!

Hors ligne

#20 12-03-2016 03:43:41

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : (Résolu) Cherche commande bash Oui - Non

Ici, je n'utilise qu'une touche ("o") sans qu'il soit necessaire de la valider par "Entrée" : Si c'est une autre touche ça voudra dire "Non".

read -sn1 -p "Doit-on faire la sauvegarde ? [o/N]"; echo;
[ "$REPLY" = "o" ] || { echo "Ok, puisque c'est ça, je sors tout de suite de ce script.";exit 1; }
echo "Bon, d'accord, alors je vais lancer la sauvegarde."
echo "Et c'est parti pour une sauvegarde…"

Et puis, si c'est NON, le code de retour du script sera à "1".
Plutôt que de créer une variable, j'utilise  la variable bash REPLY

=======
Sinon, on peut aussi en faire une fonction :

function questionOuiNon {
    read -sn1 -p "${1} ? [o/N]"; echo;
    return $( [ "$REPLY" = "o" ] )
}

questionOuiNon "Doit-on faire la sauvegarde" || { echo "On fait pas de sauvegarde et on quitte avec un code de retour à 1"; exit 1; }

echo "C'est parti pour une sauvegarde…"

Dernière modification par MicP (12-03-2016 07:52:40)

Hors ligne

Pied de page des forums