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, à 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 wink


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

choixlabel() {
  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
}

unmount() {
  local rgx="^(/mnt/|/media/).+$"
  while true; do
    read -rp "Voulez-vous démonter la partition « $Part » de son emplacement actuel et procéder aux changements pour la monter avec l'étiquette « $newLabel » ? [O/n] "
    case "$REPLY" in
      N|n)
        echo "Annulation par l’utilisateur !"
        exit 0
      ;;
      Y|y|O|o|"")
        # traitement des partitions montées :
        mapfile -t PartMountPoints < <(grep "$Part" /etc/mtab | cut -d " " -f 2)
        if [ -n "${PartMountPoints[0]}" ]; then
          for pmp in "${PartMountPoints[@]}"; do
            umount -v "$pmp"
            if [ -d "$pmp" ]; then
              if [[ $pmp =~ $rgx ]]; then
                rmdir -v "$pmp"
              else
                echo "$pmp a été conservé."
              fi
            fi
            mapfile -t numLines < <(grep -n "$pmp" /etc/fstab | cut -d ":" -f 1 | sort -rn)
            for n in "${numLines[@]}"; do
              sed -i "${n}d" /etc/fstab
            done
          done
        fi

        # traitement des partitions NON montées :
        mapfile -t mountPoints < <(grep -E "^(LABEL=|/dev/disk/by-label/)$PartLabel" /etc/fstab | cut -d ' ' -f 2)
        if [ -n "${mountPoints[0]}" ]; then
          for mp in "${mountPoints[@]}"; do
            if [ -d "$mp" ]; then
              if [[ $mp =~ $rgx ]]; then
                rmdir -v "$mp"
              else
                echo "$mp a été conservé."
              fi
            fi
            mapfile -t numLines < <(grep -n "$mp" /etc/fstab | cut -d ":" -f 1 | sort -rn)
            for n in "${numLines[@]}"; do
              sed -i "${n}d" /etc/fstab              
            done
          done
        fi
        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.
        break
      ;;
      *)
      ;;
    esac
 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."
  choixlabel
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|"")
        choixlabel
        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"
      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"
      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"
        
      fi
      unmount

      # 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 !"
        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 (Hier à 17:33)


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

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

Hors ligne

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

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

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, à 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 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, à 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 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, à 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 wink


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 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, à 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,



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, à 22:45

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

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




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

Hors ligne

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

nany

Re : [ SCRIPT ] pour montage automatique partitions internes

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, à 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
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, à 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,



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, à 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