Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/03/2025, à 17:42

iznobe

script pour montage automatique partitions de données

Bonjour , je viens d ' écrire ce petit script qui permet de créer une partition de données , en quelques renseignements .

Merci a celles et ceux qui m' ont permis de finaliser proprement le script .

je remet le script au propre ici :

#!/bin/bash

if ((UID)); then
    echo "Vous devez être super utilisateur pour lancer ce script ( essayez avec sudo )"
    exit
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 , 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
        fi
done

while [ -z "$Rep" ]; do
	echo -n "Voulez-vous procéder au montage maintenant pour la partition $Disk$PartNum en y mettant pour étiquette : $Label[O/n] ?"
	read Rep
done

if [ "$Rep" = "n" ]; then
	echo -e "Annulation !"
	exit 0
	
else
	Bloc=/dev/$Disk$PartNum
	# echo $? : trouve pas retourne 1 , trouve retourne 0
	
	if [ ! -e "$Bloc" ]; then # vérification que la partition existe bien 
		echo -e "La partition $Bloc n' existe pas !"
		exit 1
	fi
	
	if [ "$(lsblk -no fstype "$Bloc")" != ext4 ]; then # vérifier qu ' elle est bien formatée en ext4
		echo -e "la partition $Bloc n' est pas formatée en EXT4 ! "
		exit 2
	fi
	
	if grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # verifier si la ligne existe dans le fstab 
		echo -e "la partition est déjà traitée dans le fichier /etc/fstab , rien n' a donc été modifié !"
		exit 3
	fi
		
	if grep -q "^$Bloc" /etc/mtab; then # verifier si la partition est deja montée
		echo -e "La partition est déjà montée !"
		exit 4
	fi

	grep "$Label" /etc/fstab # verifier si une etiquette du meme nom existe dans le fstab
	if [ "$?" -eq 0 ]; then
		echo -e "L ' étiquette de la partition est déjà utilisée dans le fstab !"
		exit 5
	fi
	
	PartUUID=$(lsblk -no uuid "$Bloc") # recuperer l ' UUID de la partition	
	grep "$PartUUID" /etc/fstab # PartUUID est deja present dans fstab
	if [ "$?" -eq 0 ]; then
		echo -e "L UUID de la partition est déjà présent dans le fstab !"
		exit 6
		
	else # construction des éléments :
        	e2label "$Bloc" "$Label"
		mkdir -v  /media/"$Label"
		echo "LABEL=$Label /media/$Label ext4 defaults" >> /etc/fstab
		systemctl daemon-reload
                mount -a 2>/dev/null
		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


Utilisation :

passer la commande suivante qui ouvrira votre gestionnaire de fichier , dans le fichier ouvert part_data.sh , coller tout le contenu du script ci-dessus dedans et sauvegarder .

name=part_data.sh; cd /tmp; touch $name; chmod +x $name; xdg-open $name

lancer le script et répondez aux questions :

sudo bash part_data.sh

et voilou wink

Dernière modification par iznobe (Aujourd'hui à 18:50)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#2 Le 07/03/2025, à 18:00

Watael

Re : script pour montage automatique partitions de données

salut,

c'est quoi `input` ?

il y a une erreur sur Bloc = ... (pareil avec Fstype) et sur err.
mad

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, à 18:08)


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

En ligne

#3 Le 07/03/2025, à 18:10

erresse

Re : script pour montage automatique partitions de données

Watael a écrit :

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, à 18:40

iznobe

Re : script pour montage automatique partitions de données

Bonsoir , j ' ai edité pour corriger quelques erreurs du 1er jet que j' avais fait , yen avait pas mal d' ailleurs roll

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 .

iznobe a écrit :

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, à 18:54)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#5 Le 07/03/2025, à 19:18

iznobe

Re : script pour montage automatique partitions de données

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, à 19:21)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#6 Le 07/03/2025, à 21:08

Watael

Re : script pour montage automatique partitions de données

pas le temps de finir

mais tu as le temps de le poster roll

je finirai plus tard

tu aurais dû le finir avant (#jeradote) tongue
smile

la prochaine fois, quoi ? tu mets que le shebang ?! lol lol lol


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

En ligne

#7 Le 07/03/2025, à 21:31

iznobe

Re : script pour montage automatique partitions de données

ro , quel raleur tongue

je l' ai posté , car je sais pertinemment que j' ai besoin d' aide pour finir le script  roll ( et aussi que je n' avais pas de clé pour le mettre et l' emporter chez moi big_smile )
poster sur le forum c ' est 10 sec , finir le script c' est 10 heures tongue

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é lol

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 tongue ?

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 tongue

Dernière modification par iznobe (Le 07/03/2025, à 21:47)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#8 Le 07/03/2025, à 22:04

Watael

Re : script pour montage automatique partitions de données

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.

En ligne

#9 Le 08/03/2025, à 00:19

sputnick

Re : script pour montage automatique partitions de données

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

Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr

Hors ligne

#10 Le 08/03/2025, à 03:15

Watael

Re : script pour montage automatique partitions de données

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.

En ligne

#11 Le 08/03/2025, à 05:04

iznobe

Re : script pour montage automatique partitions de données

Bon , pas moyen de faire fonctionner cette satanée regex sad , 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, à 10:57)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#12 Le 08/03/2025, à 11:57

iznobe

Re : script pour montage automatique partitions de données

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, à 11:59)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#13 Le 08/03/2025, à 17:23

iznobe

Re : script pour montage automatique partitions de données

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 roll

#!/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, à 17:26)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#14 Le 08/03/2025, à 17:36

erresse

Re : script pour montage automatique partitions de données

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, à 19:05

iznobe

Re : script pour montage automatique partitions de données

arf , que je suis un boulet ...

Merci @erresse wink


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#16 Le 08/03/2025, à 19:57

iznobe

Re : script pour montage automatique partitions de données

bon , il reste un dernier probleme a regler roll
lorsque j' execute le script avec :

sudo bash test-data.sh

la variable $USER est à root roll

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, à 19:59)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#17 Le 08/03/2025, à 20:13

nany

Re : script pour montage automatique partitions de données

Bonjour,



iznobe a écrit :

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 !

Hors ligne

#19 Le 08/03/2025, à 21:45

iznobe

Re : script pour montage automatique partitions de données

Bonsoir @nany et merci wink
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 wink

#!/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, à 21:46)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#20 Le 08/03/2025, à 22:08

nany

Re : script pour montage automatique partitions de données

Ah oui, puisque tu utilises le script avec sudo, ça serait bien de tester en premier lieu que l’utilisateur est bien root.




iznobe a écrit :

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, à 05:40)

Hors ligne

#21 Le 08/03/2025, à 22:20

nany

Re : script pour montage automatique partitions de données

iznobe a écrit :

je ne sais pas pourquoi la regex : [:alnum:] ne fonctionne pas chez moi

Essaie [[:alnum:]].

Hors ligne

#22 Le 09/03/2025, à 00:38

iznobe

Re : script pour montage automatique partitions de données

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
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 .

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


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#23 Le 09/03/2025, à 01:15

Watael

Re : script pour montage automatique partitions de données

if ((UID))
then
    echo 'must be root'
    sudo -l
    exit 1
fi

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

En ligne

#24 Le 09/03/2025, à 06:28

nany

Re : script pour montage automatique partitions de données

Bonjour,



iznobe a écrit :
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:]_\-]+)"

Hors ligne

#25 Le 09/03/2025, à 12:08

iznobe

Re : script pour montage automatique partitions de données

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, à 12:16)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne