Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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 smile

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 smile

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 smile

merci pour ton aide !


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne