#1 Le 07/03/2025, à 18:42
- iznobe
[ SCRIPT ] pour montage automatique partitions internes
Bonjour , je viens d ' écrire ce petit script qui permet de créer et monter une partition automatiquement au démarrage au format EXT4 et NTFS uniquement .
Votre partition sera montée automatiquement a chaque démarrage de l' ordinateur dans le dossier suivant /media/ETIQUETTE_CHOISIE/NOM_UTILISATEUR-ETIQUETTE_CHOISIE en langage humain et francais , et en langage codé : /media/$LABEL/$USER-$LABEL .
ce qui est en majuscule change pour chacun ou en fonction de vos choix .
Dans mon cas , si je choisi l' étiquette : " Data " , alors au final je pourrais écrire , creer des dossiers , bref tout ce que je veux , dans le dossier suivant : /media/Data/iznobe-Data
EDIT du 21 / 03 / 2025 :
un grand MERCI a celles et ceux qui m' ont permis de finaliser proprement le script
EDIT du 15 / 04 / 2025 :
Dépôt du script sur github à l' adresse suivante : https://raw.githubusercontent.com/iznob … rt_data.sh et donc pour exécuter le script facilement en un seule commande :
sudo su -c "bash <(wget -qO- https://raw.githubusercontent.com/iznobe/automount_part_data/refs/heads/main/automount_part_data.sh)"
Si vous rencontrez des soucis , n ' hésitez pas a poster dans la discussion .
je remet le script au propre ici :
#!/bin/bash
# ----------------------------------------------------------------------------
# "LICENCE BEERWARE" (Révision 42):
# <iznobe@forum.ubuntu-fr.org> a créé ce fichier. Tant que vous conservez cet avertissement,
# vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
# que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
# retour.
# ----------------------------------------------------------------------------
LC_ALL=C
chooseLabel() {
local rgx="[^[:alnum:]_-.]"
while [ -z "$newLabel" ]; do
read -rp "Choisissez l’étiquette (LABEL) de votre partition de données, elle doit être UNIQUE et ne pas contenir d’espace, d’accent, de caractères spéciaux et au maximum 16 caractères : " newLabel
if [[ $newLabel =~ $rgx || ${#newLabel} -gt 16 ]]; then
echo "Le nom de votre étiquette comporte une espace, un accent ou un caractère spécial ou plus de 16 caractères !"
unset newLabel
fi
for i in ${!ListPart[*]}; do
if [[ $i == *,3 && ${ListPart[$i]} == "$newLabel" ]]; then
echo "Erreur, votre étiquette « $newLabel » est déjà attribuée ! Choisissez-en une autre."
unset newLabel
break
fi
done
done
}
delMountPoints() {
local rgx="^(/mnt/|/media/).+$"
declare -n parts=$1
for part in "${parts[@]}"; do
if test "$1" = 'mountedParts'; then umount -v "$part"; fi
if [ -d "$part" ]; then
if [[ $part =~ $rgx ]]; then
rmdir -v "$part"
else
echo "$part a été conservé."
fi
fi
mapfile -t numLines < <(grep -n "$part" /etc/fstab | cut -d ":" -f 1 | sort -rn)
for n in "${numLines[@]}"; do
sed -i "${n}d" /etc/fstab
done
done
}
if ((UID)); then
echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)."
exit 1
fi
declare -A ListPart
declare -A Rgx=( [fstype]="^(ext[2-4]|ntfs)" [mountP]="^(/|/boot|/home|/tmp|/usr|/var|/srv|/opt|/usr/local)$" )
i=-1
while read -ra lsblkDT; do #path fstype mountpoint label
if [[ ${lsblkDT[1]} =~ ${Rgx[fstype]} ]]; then
if [[ ${lsblkDT[2]} =~ ${Rgx[mountP]} ]]; then
continue
else
((++i))
ListPart[$i,0]="${lsblkDT[0]}"
ListPart[$i,1]="${lsblkDT[1]}"
if [[ ${lsblkDT[2]} =~ ^/ ]]; then
ListPart[$i,2]="${lsblkDT[2]}"
ListPart[$i,3]="${lsblkDT[3]}"
else
ListPart[$i,2]=""
ListPart[$i,3]="${lsblkDT[2]}"
fi
fi
fi
done < <(lsblk -no path,fstype,mountpoint,label)
if ((${#ListPart[@]} == 0)); then
echo "Il n’y a pas de partition susceptible d’être montée."
exit 2
fi
nbDev=$(("${#ListPart[@]}"/4))
echo
echo " n° ⇒ path label fstype mountpoint"
echo "--------------------------------------------"
for (( n=0; n<nbDev; n++ )); do
if ((n+1 < 10)); then
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
else
echo " $((n+1)) ⇒ ${ListPart[$n,0]} ${ListPart[$n,3]} ${ListPart[$n,1]} ${ListPart[$n,2]}"
fi
done
echo
while [ -z "$PartNum" ]; do
read -rp "Choisissez le numéro correspondant à votre future partition de données : " PartNum
if ! [[ $PartNum =~ ^[1-9][0-9]*$ ]] || ! ((PartNum > 0 && PartNum <= nbDev)); then
echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
unset PartNum
fi
done
Part="${ListPart[$((PartNum-1)),0]}"
PartLabel="${ListPart[$((PartNum-1)),3]}"
PartFstype="${ListPart[$((PartNum-1)),1]}"
if [ -z "$PartLabel" ]; then
echo "La partition « $Part » n’a pas d’étiquette."
chooseLabel
else
echo "La partition « $Part » a l’étiquette « $PartLabel »."
while true; do
read -rp "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
case "$REPLY" in
N|n)
newLabel="$PartLabel"
break
;;
Y|y|O|o|"")
chooseLabel
break
;;
*)
;;
esac
done
fi
while true; do
read -rp "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
echo "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then
echo "L’UUID de la partition est déjà présent dans le fstab !"
echo "les lignes contenant cet UUID seront supprimées du fichier /etc/fstab si vous poursuivez"
q=1
elif grep -Eq "(LABEL=|/dev/disk/by-label/)$newLabel" /etc/fstab; then
echo "L’étiquette « $newLabel » est déjà utilisée dans le fstab !"
echo "les lignes contenant ce LABEL seront supprimées du fichier /etc/fstab si vous poursuivez"
q=1
elif grep -q "^$Part" /etc/mtab; then
echo "La partition « $Part » est déjà montée !"
echo "la partition sera demontée , le fichier /etc/fstab nettoyé , et la partition sera à nouveau montée si vous poursuivez"
q=1
fi
while ((q=1)); do
read -rp "Etes-vous SÛR de vouloir procéder au montage pour la partition « $Part » en y mettant pour étiquette « $newLabel » ? [O/n] "
case "$REPLY" in
N|n)
echo "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
break
;;
*)
;;
esac
done
# sauvegarde
echo "sauvegarde du fichier « /etc/fstab » en « /etc/fstab.BaK » avant modifications"
cp /etc/fstab /etc/fstab.BaK
# nettoyage
# traitement des partitions montées
mapfile -t mountedParts < <(grep "$Part" /etc/mtab | cut -d ' ' -f 2)
delMountPoints mountedParts
# traitement des partitions NON montées
mapfile -t unmountedParts < <(grep -E "^(LABEL=|/dev/disk/by-label/)$PartLabel" /etc/fstab | cut -d ' ' -f 2)
delMountPoints unmountedParts
sed -i "/$(lsblk -no uuid "$Part")/d" /etc/fstab
sleep 1 # Prise en compte du montage par le dash, sans délai, parfois la partition ne s’affiche pas.
# construction des éléments :
if [[ $PartFstype =~ ext[2-4] ]]; then
e2label "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel $PartFstype defaults,nofail,x-systemd.device-timeout=1" >> /etc/fstab
elif [ "$PartFstype" == "ntfs" ]; then
ntfslabel "$Part" "$newLabel"
echo "LABEL=$newLabel /media/$newLabel ntfs3 defaults,nofail,x-systemd.device-timeout=1,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
if ! [ -d /media/"$newLabel" ]; then
mkdir -v /media/"$newLabel"
fi
systemctl daemon-reload
if ! mount -a; then
echo "erreur innatendue , annulation des modifications !"
umount -v /media/"$newLabel"
rmdir -v /media/"$newLabel"
systemctl daemon-reload
exit 3
fi
if ! [ -d /media/"$newLabel"/"$SUDO_USER"-"$newLabel" ]; then
mkdir -v /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/"$SUDO_USER"-"$newLabel"
if ! [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
mkdir -v /media/"$newLabel"/.Trash-"$SUDO_UID"
fi
chown -c "$SUDO_USER": /media/"$newLabel"/.Trash-"$SUDO_UID"
chmod -c 700 /media/"$newLabel"/.Trash-"$SUDO_UID"
if [ -d /media/"$newLabel"/.Trash-"$SUDO_UID" ]; then
echo
echo "-----------------------------------------------------------------"
echo "Script pour montage de partition de données terminé avec succès !"
echo
echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$newLabel/$SUDO_USER-$newLabel »."
sudo -u "$SUDO_USER" xdg-open "/media/$newLabel/$SUDO_USER-$newLabel" >/dev/null 2>&1
else
echo "Erreur inconnue !"
exit 4
fi
break
;;
*)
;;
esac
done
Dernière modification par iznobe (Aujourd'hui à 08:28)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#2 Le 07/03/2025, à 19:00
- Watael
Re : [ SCRIPT ] pour montage automatique partitions internes
salut,
c'est quoi `input` ?
il y a une erreur sur Bloc = ... (pareil avec Fstype) et sur err.
il est vraiment pas fini ton script; tu n'aurais pas dû le publier dans cet état.
Dernière modification par Watael (Le 07/03/2025, à 19:08)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 07/03/2025, à 19:10
- erresse
Re : [ SCRIPT ] pour montage automatique partitions internes
c'est quoi `input` ?
J'ai trouvé ça...
user@Ubuntu-Mate:~$ x=`input`
La commande « input » n'a pas été trouvée, mais peut être installée avec :
sudo apt install yagiuda
user@Ubuntu-Mate:~$
Mais alors, on est assez loin d'un codage standard...
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#4 Le 07/03/2025, à 19:40
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonsoir , j ' ai edité pour corriger quelques erreurs du 1er jet que j' avais fait , yen avait pas mal d' ailleurs
Bien sur qu ' il n' est pas fini le script , c' était un 1er jet , à la va vite , je ne l' avais meme pas testé en l ' etat .
c' est bien pour ca que j' ai ajouté les différents points manquants en tête de script . ca ne peut pas fonctionner sans LABEL par exemple . mais va falloir traiter la réponse ... c' est surtout ce point là qui va me demander de la recherche .
problème ( facile à résoudre mais pas le temps de finir ) :
+
+
+
Certainement d' autres trucs , mais je finirai plus tard wink
Dernière modification par iznobe (Le 07/03/2025, à 19:54)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#5 Le 07/03/2025, à 20:18
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
alors voici le " nouveau " script , toujours pas fonctionnel , mais j ' ai rajouter ( la base pour ) LABEL
reste encore a traiter :
+ la reponse donnée par l' utilisateur avec les contraintes liées au nom d' etiquette .
+ surement que le test pour verifier si la partition existe n' est pas correct .
+ verifier que la partition à traiter est actuellement vide avant de passer à l' action ( est-ce vraiment necessaire ? )
+ le traitement d ' erreur de la sortie du fstab
#!/bin/bash
while [ -z "$Disk" ]; do
echo "Choisissez le DISQUE où est votre future partition de données ( déja formatée en EXT4 ) : "
read Disk
done
while [ -z "$PartNum" ]; do
echo "Choisissez le NUMERO de votre future partition de données sur le disque : "
read PartNum
done
while [ -z "$Label" ]; do
echo "Choisissez le l ' etiquette ( LABEL ) de votre partition de données : "
read Label
done
while [ -z "$Rep" ]; do
echo -e "Voulez-vous proceder à la transformation maintenant pour la partition $Disk$PartNum [O/n] ?"
read Rep
done
if [ "$Rep" = "n" ]; then
echo -e "Annulation !"
exit
else # verification que la partition existe bien .
if [ ! -e /dev/"$Disk""$PartNum" ]; then
echo -e "La partition /dev/"$Disk""$PartNum" n' existe pas ! "
exit
else # verification qu ' elle est bien formatée en ext4 :
echo -e "La partition /dev/"$Disk""$PartNum" existe : OK"
Fstype = lsblk -fe7 /dev/"$Disk""$PartNum" -o fstype
if [ "$Fstype" ! "ext4" ]; then
echo -e "la partition /dev/"$Disk""$PartNum" n' est pas formatée en EXT4 ! "
exit
else # contruction des elements :
e2label /dev/"$Label"
mkdir -v /media/"$Label"
echo "LABEL=$Label /media/$Label ext4 defaults" | sudo tee -a /etc/fstab
mount -a 2>err
if [ "$err" ! null ]; then
echo "erreur du montage de la partition !"
exit
else
systemctl daemon-reload
mkdir -v /media/"$Label"/"$USER"
chown -v "$USER": /media/"$Label"/"$USER"-"$Label"
mkdir /media/"$Label"/.Trash-"$UID"
chown -v "$USER": /media/"$Label"/.Trash-"$UID"
chmod -v 700 /media/"$Label"/.Trash-"$UID"
fi
fi
fi
fi
Dernière modification par iznobe (Le 07/03/2025, à 20:21)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#6 Le 07/03/2025, à 22:08
- Watael
Re : [ SCRIPT ] pour montage automatique partitions internes
pas le temps de finir
mais tu as le temps de le poster
je finirai plus tard
tu aurais dû le finir avant (#jeradote)
la prochaine fois, quoi ? tu mets que le shebang ?!
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 07/03/2025, à 22:31
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
ro , quel raleur
je l' ai posté , car je sais pertinemment que j' ai besoin d' aide pour finir le script ( et aussi que je n' avais pas de clé pour le mettre et l' emporter chez moi
)
poster sur le forum c ' est 10 sec , finir le script c' est 10 heures
c' est clair , et j' avoue qu ' il ne ressemblait pas à grand chose , vu que ce n' etait qu ' une ebauche ... en meme temps , j' ai fait ca en un temps record , vu que je n' ai rien testé
Bon comme je le pensais , je bute sur la partie avec les regex pour les conditions de l' ecriture correcte du LABEL .
j ' ai fait ca :
while [ -z "$Label" ]; do
echo "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) : "
# caracteres speciaux :
if [[ "$Label" =~ \>\<\\:\"|?*\/ ]] ; then
echo " pas de caracteres speciaux !"
echo "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) : "
# longueur de chaine :
elif [[ "${#Label}" -gt 15 ]]; then
echo " trop de cracteres !"
echo "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) : "
else
read Label
fi
done
mais , ce que j ' aimerais , vous l' aurez compris , c ' est qu ' il re affiche le message d ' origine sans poursuivre le script .
j ' ai zappé quoi pour revenir a l' entrée de la boucle while ?
Comment j' ajoute un espace dans la regex des caracteres speciaux ? ( D ' ailleurs est elle au moins correcte cette regex ? ) un simple " \ " ? ou encore plus simple , juste un espace ?
PS : j ' ai remplacé " sudo tee -a /etc/fstab " par >> /etc/fstab . mais je ne l' ai pas encore mis , ce sera fait dans le prochain post du script
Dernière modification par iznobe (Le 07/03/2025, à 22:47)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#8 Le 07/03/2025, à 23:04
- Watael
Re : [ SCRIPT ] pour montage automatique partitions internes
j ' ai zappé quoi pour revenir a l' entrée de la boucle while ?
unset Label ?
dans des cas comme celui-là, je préfère "jusqu'à vrai" plutôt que "tant que faux" :
rgx=caractèresSpéciaux
until test -n "$Label"
do
echo -n "entrez un label : "
read Label
if [[ $Label =~ $rgx || $Label -gt 15 ]]
then
>&2 echo erreur...
unset Label
fi
done
/!\ pas testé !
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 08/03/2025, à 01:19
- sputnick
Re : [ SCRIPT ] pour montage automatique partitions internes
Faut prendre l'habitude de passer ses scripts dans https://shellcheck.net ou en ligne de commande.
Surtout dans la partie scripts/trucs/astuces.
$ shellcheck
No files specified.
Usage: shellcheck [OPTIONS...] FILES...
-a --check-sourced Include warnings from sourced files
-C[WHEN] --color[=WHEN] Use color (auto, always, never)
-i CODE1,CODE2.. --include=CODE1,CODE2.. Consider only given types of warnings
-e CODE1,CODE2.. --exclude=CODE1,CODE2.. Exclude types of warnings
-f FORMAT --format=FORMAT Output format (checkstyle, diff, gcc, json, json1, quiet, tty)
--list-optional List checks disabled by default
--norc Don't look for .shellcheckrc files
-o check1,check2.. --enable=check1,check2.. List of optional checks to enable (or 'all')
-P SOURCEPATHS --source-path=SOURCEPATHS Specify path when looking for sourced files ("SCRIPTDIR" for script's dir)
-s SHELLNAME --shell=SHELLNAME Specify dialect (sh, bash, dash, ksh)
-S SEVERITY --severity=SEVERITY Minimum severity of errors to consider (error, warning, info, style)
-V --version Print version information
-W NUM --wiki-link-count=NUM The number of wiki links to show, when applicable
-x --external-sources Allow 'source' outside of FILES
--help Show this usage summary and exit
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
#10 Le 08/03/2025, à 04:15
- Watael
Re : [ SCRIPT ] pour montage automatique partitions internes
le premier message a bien été posté dans la rubrique "Terminal, scripts et ligne de commandes".
ne voyant pas de question, et avant d'avoir lu le script, j'ai demandé à la modération de le mettre ici.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 08/03/2025, à 06:04
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bon , pas moyen de faire fonctionner cette satanée regex , passé des heures dessus pour rien !
quel est precisément la liste des caracteres alphanumeriques ? par exemeple , est -ce que le / * \ ? < > en font parti ?
#!/bin/bash
while [ -z "$Disk" ]; do
echo "Choisissez le DISQUE où est votre future partition de données ( déja formatée en EXT4 ) : "
read Disk
done
while [ -z "$PartNum" ]; do
echo "Choisissez le NUMERO de votre future partition de données sur le disque : "
read PartNum
done
#rgx=caractèresSpéciaux # \>\<\\:\"|?*\/
#until test -n "$Label"; do
# rgx= '[:alnum:]+'
# echo -n "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) : "
# read Label
# while [[ ! "$Label" =~ "$rgx" || ${#Label} -gt 15 ]]; do
# echo -n "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) : "
# echo "erreur... choissisez a nouveau :"
# read Label
# done
#done
rgx='#^[:alnum:]$#'
rgx="[:alnum:]+"
echo -n "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) : "
read Label
if [[ "$Label" =~ "$rgx" || ${#Label} -lt 16 ]]; then
continue
else
while
echo -n "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) : "
echo "erreur... choisissez a nouveau :"
read Label
fi
while [ -z "$Rep" ]; do
echo -e "Voulez-vous proceder au traitement maintenant pour la partition $Disk$PartNum [O/n] ?"
read Rep
done
if [ "$Rep" = "n" ]; then
echo -e "Annulation !"
exit
else # verification que la partition existe bien .
if [ ! -e /dev/"$Disk""$PartNum" ]; then
echo -e "La partition /dev/"$Disk""$PartNum" n' existe pas ! "
exit
else # verification qu ' elle est bien formatée en ext4 :
echo -e "La partition /dev/"$Disk""$PartNum" existe : OK"
Fstype = lsblk -fe7 /dev/"$Disk""$PartNum" -o fstype
if [ "$Fstype" ! "ext4" ]; then
echo -e "la partition /dev/"$Disk""$PartNum" n' est pas formatée en EXT4 ! "
exit
else # contruction des elements :
e2label /dev/"$Label"
mkdir -v /media/"$Label"
echo "LABEL=$Label /media/$Label ext4 defaults" >> /etc/fstab
mount -a #2>err
if [ "$0" ! null ]; then
echo "erreur du montage de la partition !"
exit
else
systemctl daemon-reload
mkdir -v /media/"$Label"/"$USER"
chown -v "$USER": /media/"$Label"/"$USER"-"$Label"
mkdir /media/"$Label"/.Trash-"$UID"
chown -v "$USER": /media/"$Label"/.Trash-"$UID"
chmod -v 700 /media/"$Label"/.Trash-"$UID"
fi
fi
fi
fi
un peu d' aide pour la regex serait la bienvenue svp .
Dernière modification par iznobe (Le 08/03/2025, à 11:57)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#12 Le 08/03/2025, à 12:57
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour , je ne sais pas pourquoi la regex : [:alnum:] ne fonctionne pas chez moi , sans :
#!/bin/bash
Label=""
rgx="[a-zA-Z0-9]"
until [[ "$Label" =~ $rgx ]]; do # || ${#Label} -gt 15
echo -n "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) : "
read Label
done
iznobe@iznobe-pc:~/Scripts$ bash test.sh
Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) : m
iznobe@iznobe-pc:~/Scripts$ bash test.sh
avec :
#!/bin/bash
Label=""
rgx="[:alnum:]"
until [[ "$Label" =~ $rgx ]]; do # || ${#Label} -gt 15
echo -n "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) : "
read Label
done
iznobe@iznobe-pc:~/Scripts$ bash test.sh
Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) : m
Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) :
^C
iznobe@iznobe-pc:~/Scripts$ bash test.sh
que puis je bien faire qui ne va pas ?
quelqu ' un sait il ecrire une regex qui fait exactement :
( pas d' espace , d' accent ni de caracteres speciaux )
je vais quand meme pas me taper à la main , tous les accents tremas et je sais pas quoi encore ... doit bien y avoir une solution " simple " non ?
Dernière modification par iznobe (Le 08/03/2025, à 12:59)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#13 Le 08/03/2025, à 18:23
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour , quelqu ' un aurait une explication pour le fait que la variable $Lab est toujours vide dans un script , alors que dans l' autre ca fonctionne a merveille svp ?? ( unset ? )
script qui fonctionne :
#!/bin/bash
Label=$1
Part=$2
echo "Label original = $Label"
echo "block partition = $Part"
reg="([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]+)"
if [[ "$Label" =~ $reg && "${#Label}" -lt 16 ]]; then
Lab=${BASH_REMATCH[1]}
echo "Label : $Label | Lab : $Lab"
if [[ "$Label" != "$Lab" ]]; then
echo "Invalid label !"
echo "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , moins de 15 caracteres ) "
fi
else
echo "Invalid label !"
echo " le nom de votre etiquette comporte un trop grand nombre de caracteres !"
fi
script dans lequel $Lab reste desesperement vide alors que c' est le meme code de base
#!/bin/bash
while [ -z "$Disk" ]; do
echo -n "Choisissez le DISQUE où est votre future partition de données ( déja formatée en EXT4 ) : "
read Disk
done
while [ -z "$PartNum" ]; do
echo -n "Choisissez le NUMERO de votre future partition de données sur le disque : "
read PartNum
done
rgx="([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]+)"
while [ -z "$Label" ]; do
echo -n "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , 15 caracteres maximum ) "
read Label
if [[ "$Label" =~ $reg && "${#Label}" -lt 16 ]]; then
Lab=${BASH_REMATCH[1]}
echo "Label : $Label | Lab : $Lab ."
if [[ "$Label" != "$Lab" ]]; then
unset Label
echo "le nom de votre etiquette comporte un espace , un accent ou un caractere special !"
fi
else
unset Label
echo "le nom de votre etiquette comporte un trop grand nombre de caracteres !"
fi
done
exit
while [ -z "$Rep" ]; do
echo -n "Voulez-vous proceder au traitement maintenant pour la partition $Disk$PartNum [O/n] ?"
read Rep
done
if [ "$Rep" = "n" ]; then
echo -e "Annulation !"
exit
else # verification que la partition existe bien .
if [ ! -e /dev/"$Disk""$PartNum" ]; then
echo -e "La partition /dev/"$Disk""$PartNum" n' existe pas ! "
exit
else # verification qu ' elle est bien formatée en ext4 :
echo -e "La partition /dev/"$Disk""$PartNum" existe : OK"
Fstype = lsblk -fe7 /dev/"$Disk""$PartNum" -o fstype
if [ "$Fstype" ! "ext4" ]; then
echo -e "la partition /dev/"$Disk""$PartNum" n' est pas formatée en EXT4 ! "
exit
else # contruction des elements :
e2label /dev/"$Label"
mkdir -v /media/"$Label"
echo "LABEL=$Label /media/$Label ext4 defaults" >> /etc/fstab
mount -a #2>err
if [ "$0" ! null ]; then
echo "erreur du montage de la partition !"
exit
else
systemctl daemon-reload
mkdir -v /media/"$Label"/"$USER"
chown -v "$USER": /media/"$Label"/"$USER"-"$Label"
mkdir /media/"$Label"/.Trash-"$UID"
chown -v "$USER": /media/"$Label"/.Trash-"$UID"
chmod -v 700 /media/"$Label"/.Trash-"$UID"
fi
fi
fi
fi
Dernière modification par iznobe (Le 08/03/2025, à 18:26)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#14 Le 08/03/2025, à 18:36
- erresse
Re : [ SCRIPT ] pour montage automatique partitions internes
Dans ton 2eme script, tu testes =~ $reg alors que ta regex est $rgx, mais ça n'a peut-être rien à voir...
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#15 Le 08/03/2025, à 20:05
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
arf , que je suis un boulet ...
Merci @erresse
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#16 Le 08/03/2025, à 20:57
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
bon , il reste un dernier probleme a regler
lorsque j' execute le script avec :
sudo bash test-data.sh
la variable $USER est à root
iznobe@iznobe-pc:~/Scripts$ sudo bash test-data.sh
Choisissez le DISQUE où est votre future partition de données ( déja formatée en EXT4 ) : sda
Choisissez le NUMERO de votre future partition de données sur le disque : 3
Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , 15 caracteres maximum ) ok
Label : ok | Lab : ok .
Voulez-vous proceder au traitement maintenant pour la partition sda3 [O/n] ?o
La partition /dev/sda3 existe : OK
Fstype = ext4
mkdir: création du répertoire '/media/ok'
mkdir: impossible de créer le répertoire «/media/ok/root»: Le fichier existe
chown: impossible d'accéder à '/media/ok/root-ok': Aucun fichier ou dossier de ce nom
impossible de modifier l'appartenance de '/media/ok/root-ok' en root:root
mkdir: impossible de créer le répertoire «/media/ok/.Trash-0»: Le fichier existe
l'appartenance de '/media/ok/.Trash-0' est maintenue à root:root
le mode de '/media/ok/.Trash-0' a été conservé à 0700 (rwx------)
Script pour montage de partition de données terminer avec succés !
iznobe@iznobe-pc:~/Scripts$
Comment est ce que je peux corriger le tir ?
voici le script en cours d' utilisation :
#!/bin/bash
while [ -z "$Disk" ]; do
echo -n "Choisissez le DISQUE où est votre future partition de données ( déja formatée en EXT4 ) : "
read Disk
done
while [ -z "$PartNum" ]; do
echo -n "Choisissez le NUMERO de votre future partition de données sur le disque : "
read PartNum
done
rgx="([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]+)"
while [ -z "$Label" ]; do
echo -n "Choisissez l ' etiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caracteres speciaux , 15 caracteres maximum ) "
read Label
if [[ "$Label" =~ $rgx && "${#Label}" -lt 16 ]]; then
Lab=${BASH_REMATCH[1]}
echo "Label : $Label | Lab : $Lab ."
if [[ "$Label" != "$Lab" ]]; then
echo "le nom de votre etiquette comporte un espace , un accent ou un caractere special !"
unset Label
fi
else
echo "le nom de votre etiquette comporte un trop grand nombre de caracteres !"
unset Label
fi
done
while [ -z "$Rep" ]; do
echo -n "Voulez-vous proceder au traitement maintenant pour la partition $Disk$PartNum [O/n] ?"
read Rep
done
if [ "$Rep" = "n" ]; then
echo -e "Annulation !"
exit
else # verification que la partition existe bien .
if [ ! -e /dev/"$Disk""$PartNum" ]; then
echo -e "La partition /dev/"$Disk""$PartNum" n' existe pas ! "
exit
else # verification qu ' elle est bien formatée en ext4 :
Bloc=/dev/"$Disk""$PartNum"
echo -e "La partition $Bloc existe : OK"
Fstype=$(lsblk -n -o fstype "$Bloc")
echo "Fstype = $Fstype"
#Ext=ext4
if [ $(echo "$Fstype") != ext4 ]; then
echo -e "la partition "$Bloc" n' est pas formatée en EXT4 ! "
exit
else # contruction des elements :
e2label "$Bloc" "$Label"
mkdir -v /media/"$Label"
echo "LABEL=$Label /media/$Label ext4 defaults" >> /etc/fstab
mount -a 2>/dev/null
systemctl daemon-reload
mkdir -v /media/"$Label"/"$USER"
chown -v "$USER": /media/"$Label"/"$USER"-"$Label"
mkdir /media/"$Label"/.Trash-"$UID"
chown -v "$USER": /media/"$Label"/.Trash-"$UID"
chmod -v 700 /media/"$Label"/.Trash-"$UID"
echo " Script pour montage de partition de données terminer avec succés !"
fi
fi
fi
Dernière modification par iznobe (Le 08/03/2025, à 20:59)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#17 Le 08/03/2025, à 21:13
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour,
Comment est ce que je peux corriger le tir ?
En remplaçant $USER par $SUDO_USER et $UID par $SUDO_UID.
Sinon :
Script pour montage de partition de données terminé avec succès !
En ligne
#18 Le 08/03/2025, à 21:20
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Et il reste des messages dans https://www.shellcheck.net/.
En ligne
#19 Le 08/03/2025, à 22:45
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonsoir @nany et merci
je viens donc de corriger le tir , il reste encore a incorporer dans la REGEX le cas ou il y a un / des espaces , ajouter l' utilisation de " - " et de " _ " , je n' ai pas réussi à faire .
j ' ai corrigé les accents .. ca à l' air de fonctionner a peu pres maintenant , merci
#!/bin/bash
while [ -z "$Disk" ]; do
echo -n "Choisissez le DISQUE où est votre future partition de données ( déjà formatée en EXT4 ) : "
read Disk
done
while [ -z "$PartNum" ]; do
echo -n "Choisissez le NUMERO de votre future partition de données sur le disque : "
read PartNum
done
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 , 15 caractères maximum ) "
read Label
if [[ "$Label" =~ $rgx && "${#Label}" -lt 16 ]]; then
Lab=${BASH_REMATCH[1]}
echo "Label : $Label | Lab : $Lab ."
if [[ "$Label" != "$Lab" ]]; then
echo "le nom de votre étiquette comporte un espace , un accent ou un caractère spécial !"
unset Label
fi
else
echo "le nom de votre étiquette comporte un trop grand nombre de caractères !"
unset Label
fi
done
while [ -z "$Rep" ]; do
echo -n "Voulez-vous procéder au traitement maintenant pour la partition $Disk$PartNum [O/n] ?"
read Rep
done
if [ "$Rep" = "n" ]; then
echo -e "Annulation !"
exit
else # vérification que la partition existe bien .
if [ ! -e /dev/"$Disk""$PartNum" ]; then
echo -e "La partition /dev/"$Disk""$PartNum" n' existe pas ! "
exit
else # vérification qu ' elle est bien formatée en ext4 :
Bloc=/dev/"$Disk""$PartNum"
echo -e "La partition $Bloc existe : OK"
Fstype=$(lsblk -n -o fstype "$Bloc")
echo "Fstype = $Fstype"
#Ext=ext4
if [ $(echo "$Fstype") != ext4 ]; then
echo -e "la partition "$Bloc" n' est pas formatée en EXT4 ! "
exit
else # construction des éléments :
e2label "$Bloc" "$Label"
mkdir -v /media/"$Label"
echo "LABEL=$Label /media/$Label ext4 defaults" >> /etc/fstab
mount -a 2>/dev/null
systemctl daemon-reload
mkdir -v /media/"$Label"/"$SUDO_USER"-"$Label"
chown -v "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label"
mkdir /media/"$Label"/.Trash-"$SUDO_UID"
chown -v "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID"
chmod -v 700 /media/"$Label"/.Trash-"$SUDO_UID"
echo " Script pour montage de partition de données terminé avec succès !"
fi
fi
fi
PS : pas eu le temps de regarder le site en question encore
Dernière modification par iznobe (Le 08/03/2025, à 22:46)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#20 Le 08/03/2025, à 23:08
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Ah oui, puisque tu utilises le script avec sudo, ça serait bien de tester en premier lieu que l’utilisateur est bien root.
j ' ai corrigé les accents
S’il n’y avait que ça.
Il y a un paquet d’espaces à supprimer (autour des apostrophes, dans les parenthèses…).
Dernière modification par nany (Le 09/03/2025, à 06:40)
En ligne
#21 Le 08/03/2025, à 23:20
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
je ne sais pas pourquoi la regex : [:alnum:] ne fonctionne pas chez moi
Essaie [[:alnum:]].
En ligne
#22 Le 09/03/2025, à 01:38
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Alors voici , le script final ( enfin je pense ) :
#!/bin/bash
if ! id | grep -q "uid=0"; then
echo "Vous devez etre super utilisateur pour lancer ce script ( essayez avec sudo )"
exit 1
fi
while [ -z "$Disk" ]; do
echo -n "Choisissez le DISQUE où est votre future partition de données ( déjà formatée en EXT4 ) : "
read Disk
done
while [ -z "$PartNum" ]; do
echo -n "Choisissez le NUMERO de votre future partition de données sur le disque : "
read PartNum
done
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 , 15 caractères maximum ) "
read Label
if [[ "$Label" =~ $rgx && "${#Label}" -lt 16 ]]; then
Lab=${BASH_REMATCH[1]}
echo "Label : $Label | Lab : $Lab ."
if [[ "$Label" != "$Lab" ]]; then
echo "le nom de votre étiquette comporte un espace , un accent ou un caractère spécial !"
unset Label
fi
else
echo "le nom de votre étiquette comporte un trop grand nombre de caractères !"
unset Label
fi
done
while [ -z "$Rep" ]; do
echo -n "Voulez-vous procéder au traitement maintenant pour la partition $Disk$PartNum [O/n] ?"
read Rep
done
if [ "$Rep" = "n" ]; then
echo -e "Annulation !"
exit 2
else # vérification que la partition existe bien .
Bloc=/dev/"$Disk""$PartNum"
if [ ! -e "$Bloc" ]; then
echo -e "La partition $Bloc n' existe pas ! "
exit 3
else # vérification qu ' elle est bien formatée en ext4 :
echo -e "La partition $Bloc existe : OK"
Fstype=$(lsblk -n -o fstype "$Bloc")
echo "Fstype = $Fstype"
if [ "$(echo "$Fstype")" != ext4 ]; then
echo -e "la partition $Bloc n' est pas formatée en EXT4 ! "
exit
else # construction des éléments :
e2label "$Bloc" "$Label"
mkdir -v /media/"$Label"
echo "LABEL=$Label /media/$Label ext4 defaults" >> /etc/fstab
mount -a 2>/dev/null
systemctl daemon-reload
mkdir -v /media/"$Label"/"$SUDO_USER"-"$Label"
chown -v "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label"
mkdir /media/"$Label"/.Trash-"$SUDO_UID"
chown -v "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID"
chmod -v 700 /media/"$Label"/.Trash-"$SUDO_UID"
echo " Script pour montage de partition de données terminé avec succès !"
fi
fi
fi
iznobe a écrit :je ne sais pas pourquoi la regex : [:alnum:] ne fonctionne pas chez moi
Essaie [[:alnum:]].
Merci , je testerai ca demain .
Dernière modification par iznobe (Le 09/03/2025, à 02:10)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#23 Le 09/03/2025, à 02:15
- Watael
Re : [ SCRIPT ] pour montage automatique partitions internes
if ((UID))
then
echo 'must be root'
sudo -l
exit 1
fi
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#24 Le 09/03/2025, à 07:28
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour,
nany a écrit :iznobe a écrit :je ne sais pas pourquoi la regex : [:alnum:] ne fonctionne pas chez moi
Essaie [[:alnum:]].
Merci , je testerai ca demain .
Vu ta dernière modif :
rgx="([[:alnum:]_\-]+)"
En ligne
#25 Le 09/03/2025, à 13:08
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bonjour , oui , mais il me semble que cela accepte les caractères accentués , ce qu ' il ne faut pas ., pour cela que j ' ai énuméré l' alphabet à la place .
EDIT : alors avec les doubles crochets , cela fonctionne , effectivement , ils auraient quand même pu le spécifier sur les sites que je suis allé voir ...
Et effectivement , alors , les caractères accentués sont acceptés :
iznobe@iznobe-pc:~$ sudo bash ~/Scripts/test-data.sh
[sudo] Mot de passe de iznobe :
Choisissez le DISQUE où est votre future partition de données ( déjà formatée en EXT4 ) : sda
Choisissez le NUMERO de votre future partition de données sur le disque : 3
Choisissez l ' étiquette ( LABEL ) de votre partition de données ( pas d' espace , d' accent ni de caractères spéciaux , 15 caractères maximum ) é
Label : é | Lab : é .
iznobe@iznobe-pc:~$
Donc , en attendant de trouver mieux , je laisse la expression réguliere telle quelle .
Dernière modification par iznobe (Le 09/03/2025, à 13:16)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne