#1 Le 07/11/2009, à 11:57
- Hizoka
(pseudo résolu) imbrication de select en bash
Bonjour,
je découvre (bien tardivement) la commande bash "select", tres pratique il est vrai
si j'ai bien compris si on ne fait pas de "break" après la réponse, il repose le choix, je voudrais donc utiliser cette "option".
je voulais imbriquer 2 "select" du genre :
select 1
select 2
ok => break 2 (pour quitter les 2 boucles)
non => break et qu'il ré-affiche le select 1
mais au lieu de ca, il ne me reprose que de rentrer une valeur, il ne me ré-affiche pas le select 1.
si je rentre une valeur, là il m'affiche bien le select 2.
je voudrais donc savoir s'il y a un moyen sans passer par une fonction d'afficher le select 1.
code :
# Question
echo "
Choississez le disque dur dont il faut modifier le montage :"
# Liste les disques durs
# ex : /dev/sda7:_UUID="1d1c6be0-4377-47d5-be41-b5bf1b11c0aa"_TYPE="ext4"
select disque_dur in $(sudo blkid | sed 's/ /_/g ; s/_$// ; /ntfs/d ; /swap/d')
do
# Supprime tout jusqu'à UUID="
uuid_disque_dur=${disque_dur#/*UUID=\"}
# Supprime tout ce qu'il y a apres "
uuid_disque_dur=${uuid_disque_dur%%\"*}
# Nom en sdX
sdx_disque_dur=${disque_dur%:*}
# Indication du disque dur choisi
echo "
Vous avez séléctionnez le disque : ${sdx_disque_dur} : ${uuid_disque_dur}.
Est-ce bien ce disque dur ?"
# Confirmation du choix du disque dur
select confirmation in "Oui, c'est bien lui" "Non, je me suis trompé"
do
if [[ "${confirmation}" == "Oui, c'est bien lui" ]]
then
# Arret des boucles
break 2
else
# Arret de la boucle pour retour dans la précédante
break
fi
done
done
Je n'utilise pas PS pour les boucles car je ne trouve pas ca pratique, je prefere une question avant le choix.
resultat :
1) /dev/sda6:_UUID="4d2dd9c7-47f6-4a0d-af62-64e35ff62eaf"_TYPE="ext4"
2) /dev/sda7:_UUID="1d1c6be0-4377-47d5-be41-b5bf1b11c0aa"_TYPE="ext4"
3) /dev/sda8:_UUID="6c93ac10-d3dd-4e27-a832-4e1fcd8465e0"_TYPE="ext3"
4) /dev/sda9:_LABEL="Video_HD"_UUID="576cd964-c6ec-406a-9473-f575fbf3ef8b"_TYPE="ext3"
5) /dev/sdb1:_LABEL="Big-dur"_UUID="def8d640-5290-4529-a558-8a61cd558361"_TYPE="ext3"
6) /dev/sdb2:_LABEL="Videos"_UUID="82d4fd6c-9877-4e2f-b77b-2beb63a96df7"_TYPE="ext3"
7) /dev/sdc1:_LABEL=""_UUID="445E-9DFA"_TYPE="vfat"
8) /dev/sdc2:_LABEL=""_UUID="44BE-9A92"_TYPE="vfat"
#? 2
Vous avez séléctionnez le disque : /dev/sda7 : 1d1c6be0-4377-47d5-be41-b5bf1b11c0aa.
Est-ce bien ce disque dur ?
1) Oui, c'est bien lui
2) Non, je me suis trompé
#? 2
#? 3 ===>>> c'est là que ça pose probleme...
Vous avez séléctionnez le disque : /dev/sda8 : 6c93ac10-d3dd-4e27-a832-4e1fcd8465e0.
Est-ce bien ce disque dur ?
1) Oui, c'est bien lui
2) Non, je me suis trompé
#? 1
ce que je voudrais :
1) /dev/sda6:_UUID="4d2dd9c7-47f6-4a0d-af62-64e35ff62eaf"_TYPE="ext4"
2) /dev/sda7:_UUID="1d1c6be0-4377-47d5-be41-b5bf1b11c0aa"_TYPE="ext4"
3) /dev/sda8:_UUID="6c93ac10-d3dd-4e27-a832-4e1fcd8465e0"_TYPE="ext3"
4) /dev/sda9:_LABEL="Video_HD"_UUID="576cd964-c6ec-406a-9473-f575fbf3ef8b"_TYPE="ext3"
5) /dev/sdb1:_LABEL="Big-dur"_UUID="def8d640-5290-4529-a558-8a61cd558361"_TYPE="ext3"
6) /dev/sdb2:_LABEL="Videos"_UUID="82d4fd6c-9877-4e2f-b77b-2beb63a96df7"_TYPE="ext3"
7) /dev/sdc1:_LABEL=""_UUID="445E-9DFA"_TYPE="vfat"
8) /dev/sdc2:_LABEL=""_UUID="44BE-9A92"_TYPE="vfat"
#? 2
Vous avez séléctionnez le disque : /dev/sda7 : 1d1c6be0-4377-47d5-be41-b5bf1b11c0aa.
Est-ce bien ce disque dur ?
1) Oui, c'est bien lui
2) Non, je me suis trompé
#? 2
1) /dev/sda6:_UUID="4d2dd9c7-47f6-4a0d-af62-64e35ff62eaf"_TYPE="ext4"
2) /dev/sda7:_UUID="1d1c6be0-4377-47d5-be41-b5bf1b11c0aa"_TYPE="ext4"
3) /dev/sda8:_UUID="6c93ac10-d3dd-4e27-a832-4e1fcd8465e0"_TYPE="ext3"
4) /dev/sda9:_LABEL="Video_HD"_UUID="576cd964-c6ec-406a-9473-f575fbf3ef8b"_TYPE="ext3"
5) /dev/sdb1:_LABEL="Big-dur"_UUID="def8d640-5290-4529-a558-8a61cd558361"_TYPE="ext3"
6) /dev/sdb2:_LABEL="Videos"_UUID="82d4fd6c-9877-4e2f-b77b-2beb63a96df7"_TYPE="ext3"
7) /dev/sdc1:_LABEL=""_UUID="445E-9DFA"_TYPE="vfat"
8) /dev/sdc2:_LABEL=""_UUID="44BE-9A92"_TYPE="vfat"
#? 3
Vous avez séléctionnez le disque : /dev/sda8 : 6c93ac10-d3dd-4e27-a832-4e1fcd8465e0.
Est-ce bien ce disque dur ?
1) Oui, c'est bien lui
2) Non, je me suis trompé
#? 1
Il existe bien évidemment de multiples façons de se passer du 2e select, mais je voudrais savoir si y a moyen de faire fonctionner comme ça
merci
Dernière modification par Hizoka (Le 08/11/2009, à 20:49)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#2 Le 07/11/2009, à 16:19
- sputnick
Re : (pseudo résolu) imbrication de select en bash
Hizoka, je te propose un script que je t''ai concocté :
http://www.sputnick-area.net/scripts/se … izoka.bash
Voici la sortie du script, c'est tres proche de ce que tu demande, si ca ne te convient pas, tu a la structure du script auquel tu pourra rajouter un select à la place de mon read pour confirmer le choix, à ta convenance :
# bash select-pour-Hizoka.bash
Choisir le disque a traiter
1) a
2) b
3) c
4) d
5) e
6) f
7) g
#? 2
Vous avez choisi le disque dur b
Confirmer ? [O/n]
> n
Choisir le disque a traiter
1) a
2) b
3) c
4) d
5) e
6) f
7) g
#? 7
Vous avez choisi le disque dur g
Confirmer ? [O/n]
> O
Execution des commandes systeme ( true pour le test )
#
Dernière modification par sputnick (Le 07/11/2009, à 16:21)
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr
Hors ligne
#3 Le 07/11/2009, à 19:12
- Hizoka
Re : (pseudo résolu) imbrication de select en bash
c'est exactement la solusion que j'ai mise en place vu que ça ne marchait pas
merci à toi.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 08/11/2009, à 12:46
- Hizoka
Re : (pseudo résolu) imbrication de select en bash
tiens je rencontre un autre probleme (que je peux contourner mais bon...)
en admettant que monfichier :
"/dev/sda6: UUID=4d2dd9c7-47f6-4a0d-af62-64e35ff62eaf TYPE=ext4" "/dev/sda7: UUID=1d1c6be0-4377-47d5-be41-b5bf1b11c0aa TYPE=ext4" "/dev/sda8: UUID=6c93ac10-d3dd-4e27-a832-4e1fcd8465e0 TYPE=ext3" "/dev/sda9: LABEL=Video_HD UUID=576cd964-c6ec-406a-9473-f575fbf3ef8b TYPE=ext3" "/dev/sdb1: LABEL=Big-dur UUID=def8d640-5290-4529-a558-8a61cd558361 TYPE=ext3" "/dev/sdb2: LABEL=Videos UUID=82d4fd6c-9877-4e2f-b77b-2beb63a96df7 TYPE=ext3"
comment faire pour que :
select UUID in $(cat monfichier)
affiche :
1) "/dev/sda6: UUID=4d2dd9c7-47f6-4a0d-af62-64e35ff62eaf TYPE=ext4"
2) "/dev/sda7: UUID=1d1c6be0-4377-47d5-be41-b5bf1b11c0aa TYPE=ext4"
3) "/dev/sda8: UUID=6c93ac10-d3dd-4e27-a832-4e1fcd8465e0 TYPE=ext3"
4) "/dev/sda9: LABEL=Video_HD UUID=576cd964-c6ec-406a-9473-f575fbf3ef8b TYPE=ext3"
5) "/dev/sdb1: LABEL=Big-dur UUID=def8d640-5290-4529-a558-8a61cd558361 TYPE=ext3"
6) "/dev/sdb2: LABEL=Videos UUID=82d4fd6c-9877-4e2f-b77b-2beb63a96df7 TYPE=ext3"
car je n'arrive à avoir que :
select UUID in $(cat monfichier)
1) "/dev/sda6: 12) UUID=576cd964-c6ec-406a-9473-f575fbf3ef8b
2) UUID=4d2dd9c7-47f6-4a0d-af62-64e35ff62eaf 13) TYPE=ext3"
3) TYPE=ext4" 14) "/dev/sdb1:
4) "/dev/sda7: 15) LABEL=Big-dur
5) UUID=1d1c6be0-4377-47d5-be41-b5bf1b11c0aa 16) UUID=def8d640-5290-4529-a558-8a61cd558361
6) TYPE=ext4" 17) TYPE=ext3"
7) "/dev/sda8: 18) "/dev/sdb2:
8) UUID=6c93ac10-d3dd-4e27-a832-4e1fcd8465e0 19) LABEL=Videos
9) TYPE=ext3" 20) UUID=82d4fd6c-9877-4e2f-b77b-2beb63a96df7
10) "/dev/sda9: 21) TYPE=ext3"
11) LABEL=Video_HD
ou
select UUID in "$(cat monfichier)"
1) "/dev/sda6: UUID=4d2dd9c7-47f6-4a0d-af62-64e35ff62eaf TYPE=ext4" "/dev/sda7: UUID=1d1c6be0-4377-47d5-be41-b5bf1b11c0aa TYPE=ext4" "/dev/sda8: UUID=6c93ac10-d3dd-4e27-a832-4e1fcd8465e0 TYPE=ext3" "/dev/sda9: LABEL=Video_HD UUID=576cd964-c6ec-406a-9473-f575fbf3ef8b TYPE=ext3" "/dev/sdb1: LABEL=Big-dur UUID=def8d640-5290-4529-a558-8a61cd558361 TYPE=ext3" "/dev/sdb2: LABEL=Videos UUID=82d4fd6c-9877-4e2f-b77b-2beb63a96df7 TYPE=ext3"
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 08/11/2009, à 18:58
- sputnick
Re : (pseudo résolu) imbrication de select en bash
Pour ca il faut recoder select. C'est sa facon d'afficher les items, ya rien à faire...
C'est exactement ce que je fais dans un petit script qui permet d'afficher des programmes TV :
http://www.sputnick-area.net/scripts/telepoche-select.bash
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr
Hors ligne
#6 Le 08/11/2009, à 20:48
- Hizoka
Re : (pseudo résolu) imbrication de select en bash
voila mon code final :
while [[ ${confirmation} != [Oo] ]]
do
# Question
echo
echo "Choississez le disque dur dont il faut modifier le montage :"
# Liste les disques durs : ex : /dev/sda7:_UUID="1d1c6be0-4377-47d5-be41-b5bf1b11c0aa"_TYPE="ext4"
#select disque_dur in $(blkid | sed 's/ /_/g ; s/_$// ; /ntfs/d ; /swap/d')
select disque_dur in $(cat /tmp/liste_UUID | sed "s/ /_/g ; s/_$/ /" | tr -d '\n')
do
# Supprime tout jusqu'à UUID="
uuid_disque_dur=${disque_dur#/*UUID=\"}
# Supprime tout ce qu'il y a apres "
uuid_disque_dur=${uuid_disque_dur%%\"*}
# Nom en sdX
sdx_disque_dur=${disque_dur%:*}
# Arret de la boucle
break
done
# Indication du disque dur choisi
echo
read -p "Vous avez séléctionnez le disque : ${sdx_disque_dur} : ${uuid_disque_dur}.
Est-ce bien ce disque dur ? [O]ui/[N]on : " confirmation
done
Tant pis pour select, j'ai remplacé les espaces par des _ et pis c'est tout
merci pour ton aide !
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne