#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 ( 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)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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
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 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 ; 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)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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" ?
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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
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 )
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#86 Le 12/03/2025, à 19:51
- Watael
Re : script pour montage automatique partitions de données
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.
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)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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
Question subsidiaire ; $UID ou "$UID" ?
ni l'un, ni l'autre. Dans une évaluation arithmétique : UID, tout nu.
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)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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
Dernière modification par iznobe (Le 14/03/2025, à 16:33)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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
Dernière modification par iznobe (Le 19/03/2025, à 01:44)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
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