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 11/04/2010, à 01:43

UUBBUU_USER

[ Résolu ]-BAsh - Créer une list dans un script

SAlut ...
Voila je souhaite créer une liste dans un script, ou les valeurs  de cette liste seraient dynamiques et ou je puisse y avoir accés ...
Aprés pas mal de tentative ...  J'en viens à votre science Ou vos propositions ....
voila ce que j'ai essayer

# Declaration de la liste vide
ALREADY_LIST=

# Item avec nom dynamique a rajouter
item=$(basename $device)

# Et donc voila j'ai tester  ces méthodes pour  remplir la liste
# $ALREADY_LIST=$ALREADY_LIST,$item
# $ALREADY_LIST=$ALREADY_LIST:$item
# $ALREADY_LIST=$ALREADY_LIST $item
# $ALREADY_LIST="$ALREADY_LIST" "$item"

Voila .. Merci D'avance !!

Dernière modification par UUBBUU_USER (Le 11/04/2010, à 02:09)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#2 Le 11/04/2010, à 01:50

sputnick

Re : [ Résolu ]-BAsh - Créer une list dans un script

Je suis pas sur de comprendre, mais si tu souhaite creer une liste :

ALREADY_LIST="$ALREADY_LIST $item"

ou encore creer un tableau :

ALREADY_LIST+=($item)

Tu peux acceder aux tableau comme ça :

echo ${ALREADY_LIST[@]}

ou à un indice particulier :

echo ${ALREADY_LIST[3]}

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 11/04/2010, à 01:51

AnsuzPeorth

Re : [ Résolu ]-BAsh - Créer une list dans un script

Bjr,
Cela ne viendrait pas du $ devant ALREADY_LIST
Il faudrait écrire :

ALREADY_LIST="$ALREADY_LIST,$item"

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#4 Le 11/04/2010, à 02:07

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

Merci Beaucoup pour ces réponses rapide ......
http://forum.ubuntu-fr.org .. plus rapide que son ombre )

UI .. 

ALREADY_LIST="$ALREADY_LIST $item"

marche Très bien ...
Je comprenais pas pourquoi ça marchais pas ...Pour tant il me semblait qu'il fallait mettre le "$" lors d'un rappel de variable ..
Par contre c'est vrai qu'un tableau serais pas mal non plus ... ( j'en ai jamais fait encore )

ALREADY_LIST+=($item)
echo ${ALREADY_LIST[@]}

Merci  Pour votre Aide ..

Allez ... vu que vous êtes rapide comme l'éclair ... un edit pour  un conseil ..
Comment controler  si une valeur est déja présente dans la liste ( ou le tableau ?? )

Dernière modification par UUBBUU_USER (Le 11/04/2010, à 02:09)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#5 Le 11/04/2010, à 02:13

AnsuzPeorth

Re : [ Résolu ]-BAsh - Créer une list dans un script

J'vais peut être encore me faire grillé par sputnick ...! (j'avais pas vu lors de mon premier post smile)

[[ ${tab[@]} =~ 'item' ]] && echo ok

EDIT: Pas ce coup ci ! Mais sputnick donnera sûrement un complément d'infos ...

Dernière modification par AnsuzPeorth (Le 11/04/2010, à 02:18)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#6 Le 11/04/2010, à 02:21

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

Merci AnsuzPeorth  ...... Franchement Vive Forum.ubuntu-fr.org ..
Et merci Sputnick ^^


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#7 Le 11/04/2010, à 18:24

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

Donc Voila Le bout de Code ..
1) je crée le tableau vide
2) je crée ma valeur à ajouter ou vérifier
3) je test si elle est déja dans mon tableau ou pas  ( içi  si elle n'est pas là )
4) ET Je l'ajoute ( vu  qu'elle n'y est pas !!)

#!/bin/bash

#1
ALREADY_LIST=

#2
item=$(basename $device)

#3
if [[ ! ${ALREADY_LIST[@]} =~ $item ]] ; then

#4
ALREADY_LIST+=($item)
fi

Encore merci Beaucoup !!!

Dernière modification par UUBBUU_USER (Le 11/04/2010, à 18:26)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#8 Le 11/04/2010, à 19:46

sputnick

Re : [ Résolu ]-BAsh - Créer une list dans un script

Dit nous a quoi sert le script, ce qu'il est censé faire et le contexte, si ca se trouve ya plus efficace


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#9 Le 11/04/2010, à 19:57

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

JE me suis lancé dans la ré-écriture d'un menu openbox ....
Inspiré d'ici d'une récente modification d'un menu existant... http://forum.ubuntu-fr.org/viewtopic.ph … 6#p3392966
J'ai repris le menu du départ .
EN gros ..  Cette liste me permet de savoir si un /dev/xxx est déja dans le menu ou pas ... Et s'il ne l'est pas .. la fonction  vérifie ces paramètres et l'affiche .


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#10 Le 12/04/2010, à 16:24

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

Hum .. désoleé de vous re-demander .... MAis j'ai un léger soucis ....
Voila ..

if [[ ! ${ALREADY_LIST[@]} =~ $item ]] ; then

Fonctionne bien ..... si jamais $item n'est pas dans $ALREADY_LIST    ... ce qu'il y a aprés fonctionne ....:D
Par contre lorsque je fait

if [[ ${VITAL_SYSTEM_LIST[@]} =~ $mount ]] ; then

Et que j'espère que si jamais $mount est dans $VITAL_SYSTEM_LIST ce qu'il y a aprés se lance .... ça ne marche  pas .... sad
Un idée ????:rolleyes:
sachant que

$item= sd**
$mount=point de montage

ps: merci d'avance

Dernière modification par UUBBUU_USER (Le 12/04/2010, à 16:25)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#11 Le 12/04/2010, à 17:01

sputnick

Re : [ Résolu ]-BAsh - Créer une list dans un script

UUBBUU_USER a écrit :

Je comprenais pas pourquoi ça marchais pas ...Pour tant il me semblait qu'il fallait mettre le "$" lors d'un rappel de variable ..

Après ça on est censé penser que tu sait gérer des variables...

Affectation :

foo="des mots séparés par des espaces"
foo=unChaineDeCaracteresSansEspaces

En aucun cas tu ne peux affecter de variables en commençant par un $ et pas non plus avec des espaces non protégés :

$foo = un truc qui me passe par la tete avec une syntaxe qui va avec

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#12 Le 12/04/2010, à 18:49

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

Euh .. oui ... sputnick ... en fait ..  c'était pour expliquer mes valeurs ...
Tu a raison .. j'aurrais dût m'appliquer Pour poser ma question .... et écrire :

item=sd**
mount=point-de-montage

Mais sinon Pouvez-vous me dire quelle erreur  je fait dans mon deuxième if ???

if [[ ${VITAL_SYSTEM_LIST[@]} =~ $mount ]] ; then

Dernière modification par UUBBUU_USER (Le 12/04/2010, à 18:49)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#13 Le 12/04/2010, à 20:23

sputnick

Re : [ Résolu ]-BAsh - Créer une list dans un script

Que valent ces variables ?

Place un echo de ces variables avant ton if et donne le resultat.

Quand "ca marche pas" on lance en debug avec

bash -x script.sh

ou on met un shebang comme ça :

#!/bin/bash -x

ou encore avec set -x


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#14 Le 12/04/2010, à 20:30

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

Que valent ces variables ?

item=sd** # une partition 
mount=point-de-montage # un point de  montage
VITAL_SYSTEM_LIST=    #  une liste des montages vitaux pour le système  " /   /home /bin  /sbin etc .."

en gros .. logiquement je veux vérifier que le $point-de-montage est bien dans ma liste $vital_system  et que si c'est le cas .... je lance mon menu  et j'ajoute mon $item dans une autre liste

ET la quelque soit le résultat ( si oui ou non il est dans la liste ) ça me lance ma suite .... d'ou le problème .. sans vraiment être un problème.

Dernière modification par UUBBUU_USER (Le 12/04/2010, à 20:32)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#15 Le 12/04/2010, à 21:13

sputnick

Re : [ Résolu ]-BAsh - Créer une list dans un script

Une façon plus propre de tester la présence d'une valeur dans une liste :

for i in ${!x[@]}; do grep -q -x motif <<< "${x[i]}" && echo "${x[i]} deja present"; done

Mais

if [[ ${VITAL_SYSTEM_LIST[@]} =~ $mount ]] ; then ...

n'est pas faux.
Si ca fait pas ce que tu attends, c'est que les valeurs des variables ne sont pas ce que tu croit.

Dernière modification par sputnick (Le 12/04/2010, à 21:14)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#16 Le 12/04/2010, à 23:32

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

Merci Beaucoup Sputnick ..
Petit à Petit .. j' apprends et Vole en dehors de mon nid )) big_smile

edit1: .... en fait mon problème viens de mes IF imbriqués .... avec mes ELIF...
Demain je reprendrais depuis le Début .......
Bah C'est en forgeant que l'on devient forgeron !!!

Dernière modification par UUBBUU_USER (Le 13/04/2010, à 00:11)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#17 Le 13/04/2010, à 12:39

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

Oué .. tellement heureux d'y être arriver ...
Je vous le Montre ....  N'hésitez pas à corriger ou même suggérer  quoi que ce soit !!!
le lancement de la boucle n'est pas le réel ... mais c'est pour faire plus simple .... en gros $y contient une liste de device

for device in $y; do
        item=$(basename $device)
        mount=$( get_mount $device)
        item_is_cd_dvd=$( get_cd $device)

	if [[ ! ${ALREADY_LIST[@]} =~ $item ]] ; then
		if [[ $fstype ]] && [[ $fstype != swap ]]; then
			
			if [ $mount ] && [[ ${VITAL_SYSTEM_LIST[@]} =~ $mount ]] ; then
				echo DD system
				SYS_DD_LIST+=($item)
				ALREADY_LIST+=($item)
				continue
			fi
			
			if [[ ${NON_VITAL_FSTAB_LIST[@]} =~ $mount ]] ; then
				echo DD interne
				if [[ $item_is_mounted == true ]]; then
					MOUNTED_DD_LIST+=($item)
					ALREADY_LIST+=($item)
					continue
				else
					UMOUNTED_DD_LIST+=($item)
					ALREADY_LIST+=($item)
					continue
				fi		
			fi
		
			if [[ $item_is_cd_dvd == false  ]]; then
					echo USB
					if [[ $item_is_mounted == true ]]; then
						MOUNTED_USB_MEDIA_LIST+=($item)
						ALREADY_LIST+=($item)
						continue
					else
						UMOUNTED_USB_MEDIA_LIST+=($item)
						ALREADY_LIST+=($item)
						continue
					fi
			fi
			
			if [[ $item_is_cd_dvd == true ]]; then
				echo CD-DVD
				if [[ $item_is_mounted == true ]]; then
					MOUNTED_CD_DVD_LIST+=($item)
					ALREADY_LIST+=($item)
					continue
				else
					UMOUNTED_CD_DVD_LIST+=($item)
					ALREADY_LIST+=($item)
					continue
				fi			
			fi
		fi
	fi
done

^^

Dernière modification par UUBBUU_USER (Le 13/04/2010, à 12:43)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#18 Le 13/04/2010, à 13:21

sputnick

Re : [ Résolu ]-BAsh - Créer une list dans un script

Comme ça la entre deux feux, je dirait que ce test là est... Pas adapté smile

if [ $mount ] && [[ ${VITAL_SYSTEM_LIST[@]} =~ $mount ]] ; then

tu peux faire plutot ça :

if [[ $mount && ${VITAL_SYSTEM_LIST[@]} =~ $mount ]] ; then

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#19 Le 13/04/2010, à 13:37

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

Merci Sputnick ....
Donc on peut imbriquer 2 commandes dans une double quote .. ( je savais pas  big_smile   )
...


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#20 Le 13/04/2010, à 13:45

sputnick

Re : [ Résolu ]-BAsh - Créer une list dans un script

double quote

??? oO un double quote comme tu dit c'est

"

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#21 Le 13/04/2010, à 14:06

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

Décidement .... il faut vraiment ne pas répondre rapidement .... sinon gare aux erreurs ..
Désolé .. les Doubles crochets ....


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#22 Le 13/04/2010, à 20:45

johndo

Re : [ Résolu ]-BAsh - Créer une list dans un script

Bonsoir,

if [[ ${VITAL_SYSTEM_LIST[@]} =~ $mount ]] ; then ...

Cette méthode présente 1 inconvénient :
- Elle retournera vraie si aucun élément contient la valeur exacte de ${mount} et si l'un des éléments contient en partie ${mount}.

Hors ligne

#23 Le 13/04/2010, à 22:20

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

SAlut johndo .. hum .. je suis pas sur de comprendre ...
Voila ( Comme son nom l'indique )  ${mount}   représente içi un point de montage ..
Si jamais j'ai un ( /media/sdb5 ) dans  ${VITAL_SYSTEM_LIST[@]} ..
Et que je compare ( /media/sdb6) à  ${VITAL_SYSTEM_LIST[@]}; cela  pourrais me renvoyer Vrai .. alors que j'attends un False ?

Dernière modification par UUBBUU_USER (Le 13/04/2010, à 22:21)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne

#24 Le 13/04/2010, à 22:38

AnsuzPeorth

Re : [ Résolu ]-BAsh - Créer une list dans un script

Non, john a raison, cette solution n'est pas fiable à 100%, mais elle a le mérite d'être rapide smile
Par exemple, si ta variable = /tmp et qu'il y a /tmp/truc dans ton tableau, le résultat sera true.

C'est bien pour ça que sputnick a proposé une solution plus 'propre', bien que beaucoup plus longue, tout dépends des risques de rencontrer un path identique, et si le temps d'exécution a une importance.


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#25 Le 13/04/2010, à 22:45

UUBBUU_USER

Re : [ Résolu ]-BAsh - Créer une list dans un script

SAlut AnsuzPeorth     
Celle-la ??

if [[ $mount && ${VITAL_SYSTEM_LIST[@]} =~ $mount ]] ; then

Aprés sinon je peux toujours réduire le point de montage avec basename

Dernière modification par UUBBUU_USER (Le 13/04/2010, à 22:46)


PEACE LOVE UNITY                                                      FREE TIBET

Hors ligne