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.

#76 Le 12/03/2025, à 18:38

iznobe

Re : script pour montage automatique partitions de données

merci pour l' explication .
de toute maniere , je suis plus à l' aise avec la syntaxe : $(cmd) .

j ' ai complémenter les tests de regex et finalement , ca ne marche pas , mais limite , je me demande si ce n ' est pas un bug tongue ( m ' etonnerait quand meme ) .

Pour faire des tests en boucle , voici un script infini :

#!/bin/bash

rgx="([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]+)"
while [ -z "$Label" ]; do
	echo -n "Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum ) "
	read Label
	
	if [[ "$Label" =~ $rgx ]]; then
		echo "le nom de votre étiquette est conforme "
            
            unset Label
        else
            echo "le nom de votre étiquette comporte un espace, un accent ou un caractère spécial ou plus de 16 caractères !"
		unset Label
    fi
done

simplissime non ?
par contre , si je donne "  m         m " a la valeur de la variable , il considere que c' est " conforme " , il est k0n ou c' est moi ?
il a vu ou les espaces dans la regex ???

j ' ai essayé sans les ( ) , mais resultat identique , vu que ca ne sert qu ' a capturer et qu ' elles sont inutiles dans ce bout de code , vu qu ' il n' y a plus de capture .

Dernière modification par iznobe (Le 12/03/2025, à 18:43)

Hors ligne

#77 Le 12/03/2025, à 18:53

geole

Re : script pour montage automatique partitions de données

Bonjour
Manifestement, il n'y a pas que les espaces..

a@b:~$ while [[ 1 < 2 ]]; do    echo -n "Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum ) ";     read Label;     if [[ "$Label" =~ $rgx ]]; then                 echo "le nom de votre étiquette "$Label" est conforme ";         else               echo "le nom de votre étiquette "$Label" comporte un espace, un accent ou un caractère spécial ou plus de 16 caractères !";        fi; done
Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum ) aaaaQQQQ-D
le nom de votre étiquette aaaaQQQQ-D est conforme 
Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum ) A"]~
le nom de votre étiquette A"]~ est conforme 
Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum ) 
le nom de votre étiquette A"]~ est conforme 
Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum ) aéb
le nom de votre étiquette aéb est conforme 
Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum ) é
le nom de votre étiquette é comporte un espace, un accent ou un caractère spécial ou plus de 16 caractères !
Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum ) 

Dernière modification par geole (Le 12/03/2025, à 18:55)


Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248

Hors ligne

#78 Le 12/03/2025, à 19:08

iznobe

Re : script pour montage automatique partitions de données

#!/bin/bash

rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]; do
	echo -n "Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum ) "
	read Label
	
	if [[ "$Label" =~ $rgx ]]; then
		
            echo "le nom de votre étiquette comporte un espace, un accent ou un caractère spécial ou plus de 16 caractères !"
            unset Label
        else
            echo "le nom de votre étiquette est conforme "
		unset Label
    fi
done

comme ça , c' est mieux , mais il accepte les espaces en début et fin de chaine ...

Dernière modification par iznobe (Le 12/03/2025, à 19:15)

Hors ligne

#79 Le 12/03/2025, à 19:13

RaphaelG

Re : script pour montage automatique partitions de données

Ce qui est strictement équivalent :
`cmd` et $(cmd)
"`cmd`" et "$(cmd)"
En tout cas avec les 2 shells que j'ai à ma disposition à savoir :

~$ dpkg -l bash dash | sed 1,5d
ii  bash           5.2.21-2ubuntu4 amd64        GNU Bourne Again SHell
ii  dash           0.5.12-6ubuntu5 amd64        POSIX-compliant shell
~$

ShellCheck nous le dit : les backticks (moi je dis plutôt back quotes) sont legacy. Je ne vois pas pourquoi on se passerait d'un héritage.
Moi, j'aime bien les back quotes. Par rapport à la forme $(cmd), on gagne un caractère. Il n'y a pas de petit profit.
Et puis j'ai mes raisons sentimentalo-nostalgiques. Lorsque j'ai débuté les shell scripts au début des années 90, c'était depuis le Bourne shell et celui ci ne connaissait que la forme `cmd`.
C'est pas ShellCheck qui va m'empêcher de les utiliser. OK boomer !

Par contre quand on commence à imbriquer des commandes comme le décrit Watael, effectivement j'admets que la forme $(cmd) est plus facile à appréhender. Mais ce n'est pas le cas dans ce post.

Quant à encadrer $(id -u) par des double quotes, je ne vois pas en quelle circonstance id pourrait renvoyer une chaîne nulle ou 2 chaînes de caractères séparées par un metacarcatère.

Pour ta regex :
Modifier des variables d'environnement depuis un shell script ne te fait pas courir de risque. Dès que tu quittes le script, tu reviens à ton environnement initial.
Je ne comprends pas ton motif #.[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\-]#+
D'abord si tu n'utilises plus BASH_REMATCH, tu n'a plus besoin de l'encadrer par des parenthèses.
Mais de toute manière, ton nouveau traitement de ta regex ne fonctionne pas. Ca boucle de manière infinie.
Si tu ne veux vraiment pas toucher aux variables d'environnement, je te propose cela :

#!/usr/bin/bash
rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]
do
    echo -n "Choisissez l'étiquette (LABEL) de votre partition de données (pas d'espace, d'accent ni de caractère spécial, 16 caractères maximum) "
    read Label
    if [[ "$Label" =~ $rgx || "${#Label}" -gt 16 ]]
    then
        echo "le nom de votre étiquette comporte un espace, un accent ou un caractère spécial ou plus de 16 caractères !"
        unset Label
    else echo "Label : $Label"
    fi
done

Le motif est bien évidemment plus long mais il y a moins de ligne.

Dernière modification par RaphaelG (Le 12/03/2025, à 19:15)

Hors ligne

#80 Le 12/03/2025, à 19:20

iznobe

Re : script pour montage automatique partitions de données

Si tu ne veux vraiment pas toucher aux variables d'environnement, je te propose cela :

Posts croisés big_smile
j ' ai écris exactement la même chose , sauf que justement , il reste un problème ... il prend les espaces avant et après sans utiliser rematch roll voilà pourquoi je testais dans une boucle infinie ce que je pensais être l' inverse , sauf que non .
il n ' empeche que je ne comprends toujours pas pourquoi notre regex laisse passer ces espaces en début et fin de chaine ...
exemple :

Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum )    pppp
le nom de votre étiquette est conforme 

je ne compte rien t ' empêché de faire du tout tu es libre big_smile ; c' était juste une remarque que je me faisais , que , justement shell check , dans certains cas , c' est un peu bidon . mais faut avouer que dans la plupart des cas , ca aide bien .

Dernière modification par iznobe (Le 12/03/2025, à 19:24)

Hors ligne

#81 Le 12/03/2025, à 19:29

RaphaelG

Re : script pour montage automatique partitions de données

Chez moi ça marche. read ne met pas les espaces dans la variable Label.

Hors ligne

#82 Le 12/03/2025, à 19:32

iznobe

Re : script pour montage automatique partitions de données

heu .
je m' attends , vu la regex , que si un espace est entré dans le champ texte , alors ce soit " non conforme " .
tu me dis que si tu tapes : " espace espace b k n espace espace "
il te repond que c ' est conforme et supprime les espaces au début et a la fin et que donc le label est en fait "bkn" ?

Hors ligne

#83 Le 12/03/2025, à 19:39

iznobe

Re : script pour montage automatique partitions de données

je viens de tester , et effectivement c' est bien le cas , il supprime les espaces en debut et fin de chaine ...
ca fait 2 heures que je bataille sur cette ....

Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum )           ppppp     
le nom de votre étiquette est conforme:ppppp|

même en entrant plus de 50 espaces  dans le nom de l' étiquette .

Dernière modification par iznobe (Le 12/03/2025, à 19:40)

Hors ligne

#84 Le 12/03/2025, à 19:39

RaphaelG

Re : script pour montage automatique partitions de données

Oui !
Si tu veux t'en convaincre, rajoute dans ton script :
echo $Label | od -Ad -tcx1

Hors ligne

#85 Le 12/03/2025, à 19:47

iznobe

Re : script pour montage automatique partitions de données

ok , une subtulité de read donc ... merci , j ' aurais appris ca encore wink

juste une dernière question , est ce que :

rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]
do
    echo -n "Choisissez l'étiquette (LABEL) de votre partition de données (pas d'espace, d'accent ni de caractère spécial, 16 caractères maximum) "
    read Label
    if [[ "$Label" =~ $rgx || "${#Label}" -gt 16 ]]
    then
...

et

rgx="[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"
while [ -z "$Label" ]
do
    echo -n "Choisissez l'étiquette (LABEL) de votre partition de données (pas d'espace, d'accent ni de caractère spécial, 16 caractères maximum) "
    read Label
    if [[ ! "$Label" =~ $rgx || "${#Label}" -gt 16 ]]
    then
..

c' est pareil ? ( modif regex et condition a l' envers )

Hors ligne

#86 Le 12/03/2025, à 19:51

Watael

Re : script pour montage automatique partitions de données

RaphaelG a écrit :

Quant à encadrer $(id -u) par des double quotes, je ne vois pas en quelle circonstance id pourrait renvoyer une chaîne nulle ou 2 chaînes de caractères séparées par un metacarcatère.

t'énerve pas comme ça
d'tout'façon e' sert à rien cette commande, puisqu'on a $UID. big_smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#87 Le 12/03/2025, à 20:12

RaphaelG

Re : script pour montage automatique partitions de données

@iznobe:
Le motif [abc] touche toutes les chaînes de caractère qui contiennent un 'a' ou un 'b' ou un 'c'.
Le motif [^abc] touche toutes les chaînes qui ne contiennent pas un 'a', ni un 'b', ni un 'c'.

@watael :
Ah bien sûr que si que je m'énerve !
C'est le grand principe de la robotique et de l'informatique : l'homme doit rester plus fort que la machine et plus fort que l'IA.
Mais faut que je me calme car tu as raison. Autant tester $UID.
Question subsidiaire ; $UID ou "$UID" ?

Dernière modification par RaphaelG (Le 12/03/2025, à 20:30)

Hors ligne

#88 Le 12/03/2025, à 20:12

iznobe

Re : script pour montage automatique partitions de données

avec choix numero 2 ( regex non inversée ) :

Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 16 caractères maximum ) m&m's
le nom de votre étiquette est conforme 

Donc non , malgré ce qu ' il parait au 1er abord , ca  n' est pas l' inverse ... il faut modifier la regex aussi .

Dernière modification par iznobe (Le 12/03/2025, à 20:14)

Hors ligne

#89 Le 12/03/2025, à 20:20

RaphaelG

Re : script pour montage automatique partitions de données

Ben oui, en #79 le motif de ma regex commence par [^

edit : je complète parce que j'ai l'impression que c'est pas très clair dans ta tête.

Le motif [abc]+ touche les chaînes 'a', 'ab', 'aba', 'aabbcc' .... Il y a une infinité de chaînes qui correspondent au motif.
Par contre les chaines 'd', 'abd', 'bde' .... ne correspondent pas au motif. La chaîne nulle '' ne correspond pas non plus à cause du répéteur '+'.

Le motif [^abc] touche toutes les chaînes qui ne contienne ni 'a', ni 'b', ni 'c'. Par exemple les chaînes 'd', 'de', 'ded', 'ddeeff' ....
Les chaînes 'a', ae', 'be', 'ec', 'efgb' ne correspondent pas.

IHTH

Dernière modification par RaphaelG (Le 12/03/2025, à 20:54)

Hors ligne

#90 Le 12/03/2025, à 21:32

Watael

Re : script pour montage automatique partitions de données

RaphaelG a écrit :

Question subsidiaire ; $UID ou "$UID" ?

ni l'un, ni l'autre. Dans une évaluation arithmétique : UID, tout nu. big_smile

if ((UID)); ...

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#91 Le 13/03/2025, à 02:17

iznobe

Re : script pour montage automatique partitions de données

ce que je ne trouve pas clair , c' est plutôt :

rgx=[^abc]
rgx2=[abc]
var=$("$chaine" =~ $rgx)
var2=$( ! "$chaine" =~ $rgx2)
var === var2

logiquement pour moi var et var 2 devrait être égales dans tous les cas puisque le ^ en tête signifie inverse de la regex , comme le ! .

Dernière modification par iznobe (Le 13/03/2025, à 02:19)

Hors ligne

#92 Le 14/03/2025, à 16:17

RaphaelG

Re : script pour montage automatique partitions de données

Houla, tu m'embrouilles avec tes questions. La réponse m'a pris du temps et de la réflexion.

Tout d'abord, $("$chaine" =~ $rgx), c'est n'importe quoi. Bash ne l'accepte pas.
Ce qui passe avec bash :
[[ $chaine =~ "motif" ]]
$([[ $chaine =~ "motif" ]])

Faire : var=$([[ $chaine =~ "motif" ]])
ne sert à rien car cette commande interne au bash, [[...]], ne renvoie rien sur stdin et donc $var sera toujours une chaîne nulle. Pour exploiter le résulat de [[ $chaine =~ motif ]], il faut utiliser la valeur de la variable $?. $? aura la valeur de :
- 0 lorsque $chaine correspond au motif.
- 1 lorsque $chaine ne correspond pas au motif.
C'est un peu comme dans le post #69.

Dans un premier temps j'ai pensé comme toi  que [[ $chaine =~ "[^abc]" ]] retournait la même chose que [[ ! $chaine =~ "[abc]" ]].
Mais en fait non. Ca dépend évidemment de ce qu'il y a dans $chaine.

bash$ cat test3.sh
#!/usr/bin/bash
# 1 seul argument : la chaîne de caractère à soumettre.
chaine=$1
motif="[^abc]"
motif2="[abc]"
[[ $chaine =~ $motif ]]
echo 'retour de [[ $chaine =~ "[^abc]" ]] : ' $?
[[ ! $chaine =~ $motif2 ]]
echo 'retour de [[ ! $chaine =~ "[abc]" ]] : ' $?
bash$ ./test3.sh a
retour de [[ $chaine =~ "[^abc]" ]] :  1
retour de [[ ! $chaine =~ "[abc]" ]] :  1
bash$ ./test3.sh d
retour de [[ $chaine =~ "[^abc]" ]] :  0
retour de [[ ! $chaine =~ "[abc]" ]] :  0
bash$ # pour l'instant c'est comme tu le pensais. Mais :
bash$ ./test3.sh ad
retour de [[ $chaine =~ "[^abc]" ]] :  0
retour de [[ ! $chaine =~ "[abc]" ]] :  1
bash$  

Dernière modification par RaphaelG (Le 14/03/2025, à 16:19)

Hors ligne

#93 Le 14/03/2025, à 16:31

iznobe

Re : script pour montage automatique partitions de données

oui , c' est ce que j ' en ai deduis de mes tests precedents ... vu le temps que j ' y ai passé , j ' en ai fait des tests .

Donc , si le resultat escompté n ' est pas obtenu , c' est que l ' on sy prend mal .
question bete , est ce que ( je ne sais pas si ca sera syntaxiquement correct , je sors ca comme ca ) , mais est ce que :

rgx == ! rgx2

ce qui permettrait d' ecrire plutot donc , selon ton script valide :

retour de [[ $chaine =~ ! "rgx" ]] :  0

je suppose que non , sinon il n' existerait pas [^.......]
c' est juste pour voir si on peut , ca n' a aucun interet dans le script actuel puisqu ' on a trouvé déjà plusieurs solutions fonctionnelles .
je ne compte plus rechanger tongue

Dernière modification par iznobe (Le 14/03/2025, à 16:33)

Hors ligne

#94 Le 15/03/2025, à 14:11

RaphaelG

Re : script pour montage automatique partitions de données

Toi même tu sais. Non !
Le point d'exclamation, '!', c'est l'opérateur négation de la logique mathématique bivalente. Il se met devant une proposition qui ne peut avoir que 2 valeurs : vraie (1) ou fausse (0).

Donc, non, on ne peut pas mettre '!' devant une variable ou une chaîne de caractère.

De même, dire que [^abc] est le l'inverse ou le contraire ou la négation de [abc] est un raccourci complètement fallacieux.

Hors ligne

#95 Le 18/03/2025, à 20:38

iznobe

Re : script pour montage automatique partitions de données

Bonjour,
admettons que je veuille lister les partitions en presence sur le systeme d' un utilisateur k, afin de proposer directement un choix via un numero .
j ' envisageai de creer un tableau pour mettre un retour de commande .

Comment est ce que je peux faire , pour créer par rapport au retour de cette commande :

lsblk -no fstype,label,mountpoint,kname

un tableau indexé qui contient les données retournées de chaque partition , sachant que label et mountpoint peuvent retourner des " vides " , et qu ' en fait donc je peux avoir que 2 index dans mon tableau pour une partition.

J ' ai essayé pas mal de trucs , mais pour le moment , pas trouvé un semblant d' approche potable .
la seule chose que je vois pour l' instant , est de faire 2 boucles , une pour recuperer chaque partition , puis une autre pour recuperer les données , par exemple une boucle du genre . pas terrible donc neutral

Dernière modification par iznobe (Le 19/03/2025, à 01:44)

Hors ligne

#96 Le 19/03/2025, à 01:18

iznobe

Re : script pour montage automatique partitions de données

ameliorable ?

PartList=$(lsblk -no path,label,fstype | grep ext)

tableau=(${PartList// / })
echo "liste des partitions disponibles sur votre systeme :"
j=0
for i in "${!tableau[@]}"; do
	#echo "$i - ${tableau[$i]}"
	if ((i%3 == 0)); then
		((j+=1))		
		if [[ ${tableau[(($i+1))]} != empty ]]; then
			echo "$j => ${tableau[$i]} , label : ${tableau[(($i+1))]}"
		else
			echo "$j => ${tableau[$i]}"
		fi
	fi
done

while [ -z "$PartNum" ]; do	
	echo -n "Choisissez le numero correspondant à votre future partition de données :"
	read PartNum
done

Dernière modification par iznobe (Le 19/03/2025, à 02:02)

Hors ligne

#97 Le 19/03/2025, à 03:08

Watael

Re : script pour montage automatique partitions de données

  • que crois-tu que fait ${PartList// / } ? que ne fait pas $PartList tout seul ?

  • je ne vois quand lsblk affiche "empty", et donc comment ça pourrait se retrouver dans le tableau.

c'est ça que tu veux

lsblk -no path,label,fstype | awk '$NF ~ "ext"{ print ++n" => " $1, $2}'

?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#98 Le 19/03/2025, à 09:17

iznobe

Re : script pour montage automatique partitions de données

Comment pourrais je obtenir un tableau par ligne du retour de la commande " lsblk " , ca serait l' idéal , example :

tableau Partlist1 => $path $label $fstype
tableau Partlist2 => $path $label $fstype
etc ...

ou encore ajouter kname a lsblk et mettre le kname en suffixe du nom de tableau :

lsblk -no path,label,fstype,kname | grep ext
TableauPart"$kname" => $path $label $fstype $kname

@Watael , en fait j' essaie de récupérer une " liste " de données pour chaque partition au format ext , en ne faisant qu ' une seule boucle si possible que je peux ensuite traiter .
Donc les tableaux semblent tout indiquer .
le problème c' est que je n' arrive pas à mettre en forme correctement .
est ce que je peux fair en sorte d' obtenir un tableau par partition en me basant sur la " fin de ligne " du retour de lsblk ?
exemple , avec un cat et un fichier :

iznobe@iznobe-pc:~$ lsblk -no path,label,fstype | awk '$NF ~ "ext"{ print ++n" => " $1, $2}' > test
iznobe@iznobe-pc:~$ cat test
1 => /dev/sda1 Seagate_4T
2 => /dev/sda3 test
3 => /dev/sda4 ubuntu_24.04
4 => /dev/sdb1 WD8
5 => /dev/sdb2 SAUV
6 => /dev/sdc3 Data
7 => /dev/sdd1 WD8PRO1_P1
8 => /dev/sdd2 WD8PRO1_P2
9 => /dev/sde1 WD8PRO2
10 => /dev/nvme0n1p5 LM_21_SSD
11 => /dev/nvme0n1p6 U_20.04_SSD
12 => /dev/nvme0n1p7 U_22.budgie_SSD
13 => /dev/nvme0n1p8 poire
14 => /dev/nvme0n1p9 LM_SSD_NEW
15 => /dev/nvme0n1p10 DEBIAN_XFCE
16 => /dev/nvme0n1p11 Archlinux
iznobe@iznobe-pc:~$ 

Dans ce cas je voudrais un 1er tableau ( suffixe 1 dans son nom par exemple ) qui contienne "/dev/sda1"  "Seagate_4T"
un 2eme tableau qui contienne "/dev/sda3"  "test"
etc ...

ou un seul tableau qui contienne tous les tableaux correspondants au pire .

Dernière modification par iznobe (Le 19/03/2025, à 09:27)

Hors ligne

#99 Le 19/03/2025, à 10:26

iznobe

Re : script pour montage automatique partitions de données

J ' ai testé ça :
l ' idée , c ' est de creer un tableau contenant les tableaux des données de partitions .

lsblk -no path,label,fstype | grep ext > test

fichier="test"
oldIFS=$IFS     # sauvegarde du séparateur de champ
IFS=$'\n'       # nouveau séparateur de champ, le caractère fin de ligne

j=0
declare -a PartList=("")
for ligne in $(<$fichier); do
	
	Part=(${ligne// /})
	PartList["${#tPartList[@]}"]=$Part # ajout d' un element a la fin du tableau
	echo "Part = $Part ; PartList = ${PartList[@]}"
	((j+=1))
done
IFS=$oldIFS
echo "${PartList[@]}"

Mais je n' obtiens pas le tableau indexé désiré ... seulement la 1ere ligne .



EDIT : Bon avec cette version qui me parait moins performante , cela fonctionne pour le tableau global :

lsblk -no path,label,fstype | grep ext > test

fichier="test"
oldIFS=$IFS     # sauvegarde du séparateur de champ
IFS=$'\n'       # nouveau séparateur de champ, le caractère fin de ligne


declare -a PartList=("")
for ligne in $(<$fichier); do
	Part=(${ligne})
	#PartList["${#tPartList[@]}"]=$Part # ajout d' un element a la fin du tableau
	PartList=("${PartList[@]}" "$Part") # ajout d' un element au tableau avec recreation du tableau
done
IFS=$oldIFS
echo "${PartList[@]}"

Evidemment , vu que le tableau Part est re-ecris a chaque tour de boucle , je ne peux acceder qu ' au dernier , qui est le seul existant a la sortie de la boucle ...

Comment faire pour remedier à ca svp ?

Dernière modification par iznobe (Le 19/03/2025, à 11:41)

Hors ligne

#100 Le 19/03/2025, à 13:53

Watael

Re : script pour montage automatique partitions de données

je crois que tu veux faire un tableau de tableaux.
par exemple :

tablOtableaux=( [tb1]=( dt1 dt2 'dt x') [tb2]=( dt3 dt4 'dt y' ) [tbN]=(...) )

mais ça n'existe pas en bash.

on peut bricoler quelque chose :

$ arrays=( tab1 tab2 tabN )                                                                                                                                       
$ tab1=( dat1 dat2)                                                                                                                                               
$ tab2=( dat3 dat4)                                                                                                                                               
$ tabN=( dat5 dat6)                                                                                                                                               
$ for i in "${arrays[@]}"; do declare -n ar=$i; echo $i; printf '\t%s\n' "${ar[@]}"; done                                                                         
tab1                                                                                                                                                                                                   
        dat1                                                                                                                                                                                           
        dat2                                                                                                                                                                                           
tab2                                                                                                                                                                                                   
        dat3                                                                                                                                                                                           
        dat4                                                                                                                                                                                           
tabN                                                                                                                                                                                                   
        dat5                                                                                                                                                                                           
        dat6

le format n'est qu'une mise en évidence.

MAIS, ça ne résoud pas le problème des données absentes, parce  que lsblk  ne permet pas d'utiliser un séparateur.

PS: tu peux te dispenser de grep :

$ lsblk -o path,label,fstype --filter 'FSTYPE =~ "ext"'

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne