#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 )
[[ ${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 ....
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
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 ))
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é
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 )
...
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
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