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.

#151 Le 09/04/2025, à 15:49

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

nany a écrit :

Une partition de données montée dans /media/data avec des liens qui pointent vers Documents etc.
Le message est : « umount: /media/data: la cible est active. »

ha oui , j' ai la meme chose .
En meme temps ca parait normal si elle est deja inscrite dans le fichier /etc/fstab .

Du coup , j ' ai deplacé le test pour démonter la partition qui ne procédera que si pas d ' erreur avant , finalement ca parait bien plus logique comme ça d' ailleurs .
j ' ai viré les " return " que tu avais ajouté tongue et corrigé 2 bricoles au niveau syntaxe .

Et je suis revenu à la version anterieure avec les boucles et les case ( ta version ajustée ) puisque là , au moins , l ' appui sur entrée pour sélection par défaut fonctionne .

#!/bin/bash

label() {
  local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"

  while [ -z "$Label" ]; do
    echo -n "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 : "
    read -r Label
    if [[ "$Label" =~ $rgx || "${#Label}" -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 Label
    fi
  done
  for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
    if [[ "$Label" == "$PartLabel" ]]; then
      echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
      exit 7
    fi
  done
}

if ((UID)); then
  echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)"
  exit
fi

$(lsblk -no path,label,fstype  |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ext|ntfs" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs$/) 
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')

nbDev=$(( "${#ListPart[@]}"/3 ))

for (( n=0; n<nbDev; n++ )); do
  echo "$(( n+1 )) ⇒ ${ListPart[$n,0]}   ${ListPart[$n,1]}   ${ListPart[$n,2]}"
done

while [ -z "$PartNum" ]; do
  read -p "Choisissez le numéro correspondant à votre future partition de données : " PartNum
  if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif non nul
    echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
    unset PartNum
  elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
    echo "Votre choix doit être compris entre 1 et $nbDev."
    unset PartNum
  fi
done

Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"

if [[ -z "$PartLabel" ]]; then
  echo "La partition « $Part » n’a pas d’étiquette."
  label
else
  echo "La partition « $Part » a l’étiquette « $PartLabel »."
  while [ -z "$Rep" ]; do
    echo -n "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
    read -r Rep
    case "$Rep" in
      N|n)
        Label="$PartLabel"
		break
      ;;
      Y|y|O|o|"")
        label
        break
      ;;
      *)
        unset Rep
      ;;
    esac
  done
fi

while [ -z "$Rep2" ]; do
  echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » ? [O/n] "
  read -r Rep2

  case "$Rep2" in
    N|n)
   	  echo -e "Annulation par l’utilisateur !"
      exit 0
    ;;
    Y|y|O|o|"")
      if [ ! -e "$Part" ]; then # vérification que la partition existe bien 
        echo -e "La partition « $Part » n’existe pas !"
        exit 1
      fi
      if [ "$PartFstype" != ext4 ] && [ "$PartFstype" != ext3 ] && [ "$PartFstype" != ext2 ] && [ "$PartFstype" != ntfs ]; then # vérifier qu’elle est bien formatée en ext ou ntfs
        echo -e "La partition « $Part » n’est pas au bon format !"
        exit 2
      fi
      if grep -q "^LABEL=$Label /media/$Label ext4 defaults" /etc/fstab; then # vérifier si la ligne existe dans le fstab 
        echo -e "Une partition avec étiquette « $Label » est déjà traitée dans le fichier /etc/fstab, rien n’a donc été modifié !"
        exit 3
      fi
      if grep -q "$Label" /etc/fstab; then # vérifier si une étiquette du même nom existe dans le fstab
        echo -e "L’étiquette « $Label » est déjà utilisée dans le fstab !"
        exit 4
      fi
      if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then # PartUUID est déjà present dans fstab
        echo -e "L’UUID de la partition est déjà présent dans le fstab !"
        exit 5
      fi
	  if grep -q "^$Part" /etc/mtab; then # vérifier si la partition est déjà montée
        echo -e "La partition « $Part » est déjà montée !"
        umount -v "$Part"
      fi

      # construction des éléments :
      if [[ "$PartFstype" == "ext[2-4]"  ]]; then
        e2label "$Part" "$Label"
        echo "LABEL=$Label /media/$Label $PartFstype defaults" >> /etc/fstab
      elif [[ "$PartFstype" == "ntfs"  ]]; then
        echo " FSTYPE=$PartFstype"
        ntfslabel  "$Part" "$Label"
        echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
      fi
      mkdir /media/"$Label" 2>/dev/null
      systemctl daemon-reload
      mount -a 2>/dev/null
	  
      mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
      chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
      mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
      chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
      chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null

      if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
        echo "Script pour montage de partition de données terminé avec succès !"
        echo "Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/$Label/$SUDO_USER-$Label »."
      else
	    echo "erreur inconnue !"
	    exit 6
	  fi
      break
    ;;
    *)
      unset Rep2
    ;;
  esac
done

puis je remplacer aussi :

if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" || "$PartFstype" == "ext2" ]]; then

par :

if [[ "$PartFstype" == "ext[2-4]"  ]]; then

shellcheck ne me hurle pas dessus big_smile


EDIT : Allez hop , j ' ai edité le script au dessus dans une version finalisée que je compte passer dans le 1er post , si rien à redire .

Dernière modification par iznobe (Le 09/04/2025, à 16:12)

Hors ligne

#152 Le 09/04/2025, à 17:57

nany

Re : [ SCRIPT ] pour montage automatique partitions internes

iznobe a écrit :

j ' ai viré les " return " que tu avais ajouté

Tu as bien fait, il étaient juste là pour éviter les erreurs de script dus au fait que toutes les lignes étaient commentées dans le if.





iznobe a écrit :

puis je remplacer aussi :

if [[ "$PartFstype" == "ext4" || "$PartFstype" == "ext3" || "$PartFstype" == "ext2" ]]; then

par :

if [[ "$PartFstype" == "ext[2-4]"  ]]; then

shellcheck ne me hurle pas dessus big_smile

Ça devrait le faire, oui (d’ailleurs j’y avais pensé). Et si en plus shellcheck est d’accord…

Hors ligne

#153 Le 09/04/2025, à 18:43

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

en fait ca ne marche pas , faut passer par une regex .

j ' ai supprimer un des 2 tests sur le contrôle dans fstab .
ca à l' air de marcher pas trop mal .


J ' ai posté directement dans le 1er post cette fois vu que ce ne sont que des modifications qui me semblent mineures .

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

Hors ligne

#154 Le 09/04/2025, à 19:29

Watael

Re : [ SCRIPT ] pour montage automatique partitions internes

$ for i in {1..5}; do [[ ext$i == ext[2-4] ]]; echo "\$i=$i -- \$?=$?"; done
$i=1 -- $?=1
$i=2 -- $?=0
$i=3 -- $?=0
$i=4 -- $?=0
$i=5 -- $?=1
$ 

sans guillemets !


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

Hors ligne

#155 Le 09/04/2025, à 19:36

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

Salut watael .
j ' avais ecrit sans guillemets :

if [[ "$PartFstype" == ext[2-4] ]]; then
...

Curieusement , je n' avais pas d' erreur , mais pas le résultat escompté .
la partie construction des éléments ne s ' exécutait pas .

Apres , je suis pas sur que ca change grand chose au final . Mais au moins je sais que c' est possible .

Mais pas compris pourquoi ca ne marchait pas , ha si probablement a cause de l' imbrication des [ dans la condition .

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

Hors ligne

#156 Le 09/04/2025, à 19:36

nany

Re : [ SCRIPT ] pour montage automatique partitions internes

iznobe a écrit :

J ' ai posté directement dans le 1er post cette fois vu que ce ne sont que des modifications qui me semblent mineures .

Extrait, lignes 137 à 141 :

      else
      echo "erreur inconnue !"
      exit 6
    fi
      break

Ajouter deux espaces au début des lignes 138 à 140 pour avoir une indentation parfaite. wink

Dernière modification par nany (Le 09/04/2025, à 19:38)

Hors ligne

#157 Le 09/04/2025, à 19:40

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

rô , tu pinailles là tongue

Aller , je retourne éditer big_smile

Hors ligne

#158 Le 09/04/2025, à 19:41

nany

Re : [ SCRIPT ] pour montage automatique partitions internes

iznobe a écrit :

rô , tu pinailles là tongue

Oui, oui. big_smile

Hors ligne

#159 Le 09/04/2025, à 19:43

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

En tout cas , merci encore pour ton aide nany wink

Hors ligne

#160 Le 09/04/2025, à 19:45

nany

Re : [ SCRIPT ] pour montage automatique partitions internes

iznobe a écrit :

Aller , je retourne éditer big_smile

T’as oublié la ligne 140 (le fi). tongue

Hors ligne

#161 Le 09/04/2025, à 19:53

nany

Re : [ SCRIPT ] pour montage automatique partitions internes

iznobe a écrit :

En tout cas , merci encore pour ton aide nany wink

Il n’y a pas de quoi.


Maintenant que ton script tient la route, il te reste à y mettre une licence. Personnellement, j’aime bien la licence beerware.

Hors ligne

#162 Le 09/04/2025, à 20:24

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

effectivement , cette licence vaut la peine d' être ajouté  big_smile

Elle clôture bien smile

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

Hors ligne

#163 Le 09/04/2025, à 20:51

nany

Re : [ SCRIPT ] pour montage automatique partitions internes

Attention !
Tu as recopié tel quel les lignes de la page de Wikipédia. Seulement, en bash, les commentaires doivent se faire avec des croisillons, comme ici par exemple.
(Et pense a changer le nom de l’auteur.)

Hors ligne

#164 Le 09/04/2025, à 21:03

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

oui , j' avais trop faim tongue

j ' ai fait ça à la va vite big_smile

C' est corrigé wink

Hors ligne

#165 Le 10/04/2025, à 11:43

geole

Re : [ SCRIPT ] pour montage automatique partitions internes

Bonjour
Il me semble qu'il reste  un petit bug. Si la partition est montée, elle est bien démontée. Mais le fichier fstab continue de connaître sa définition.

a@b:/tmp$ sudo bash part_data.sh
[sudo] Mot de passe de a : 
1 ⇒ /dev/sda1   ssdWinboot   ntfs
2 ⇒ /dev/sda2   ssdWinXP   ntfs
3 ⇒ /dev/sda3   ssdWin10   ntfs
4 ⇒ /dev/sda4   ssdUbuntu2404   ext4
5 ⇒ /dev/sdb1   WinXP-2To   ntfs
6 ⇒ /dev/sdb2   NosDonnees   ntfs
7 ⇒ /dev/sdb3   Win7-2To   ntfs
8 ⇒ /dev/sdc2   4ToWinXP-2To   ntfs
9 ⇒ /dev/sdc3   4ToWin7-2To   ntfs
10 ⇒ /dev/sdc4   4tossdWinboot   ntfs
11 ⇒ /dev/sdc5   4ToHOME   ext4
12 ⇒ /dev/sdc6   4ToNosDonnees   ntfs
13 ⇒ /dev/sdc7   4ToBigDisk   ntfs
14 ⇒ /dev/sdc8   4ToReserve   ntfs
15 ⇒ /dev/sdc9   4TossdWin10   ntfs
16 ⇒ /dev/sdc11   4ToFamille   ext4
17 ⇒ /dev/sdc12   4tossdWin10-OLD   ntfs
18 ⇒ /dev/sdc13   4TossdUbuntu2404   ext4
19 ⇒ /dev/sdc15   4ToUbuntu   ext4
20 ⇒ /dev/sdd5   ntfs3g   ntfs
21 ⇒ /dev/sdd6   ntfs3   ntfs
22 ⇒ /dev/sdd9   Partage   ext4
23 ⇒ /dev/sdd10   TESText4   ext4
24 ⇒ /dev/sdd11   TESText3   ext3
25 ⇒ /dev/sdd12   TESText2   ext2
26 ⇒ /dev/sdd13   TESTntfs1   ntfs
27 ⇒ /dev/sdd14   TESTntfs2   ntfs
28 ⇒ /dev/sdd15   TESTntfs3   ntfs
29 ⇒ /dev/md0      ext4
30 ⇒ /dev/md0      ext4
Choisissez le numéro correspondant à votre future partition de données : 28
La partition « /dev/sdd15 » a l’étiquette « TESTntfs3 ».
Voulez-vous changer l’étiquette de la partition « /dev/sdd15 » ? [O/n] 
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 : TESTntfsbis
Voulez-vous procéder au montage maintenant pour la partition « /dev/sdd15 » en y mettant pour étiquette « TESTntfsbis » ? [O/n] 
La partition « /dev/sdd15 » est déjà montée !
umount: /media/TESTntfs3 (/dev/sdd15) démonté
-----------------------------------------------------------------
Script pour montage de partition de données terminé avec succès !

Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/TESTntfsbis/a-TESTntfsbis ».

a@b:/tmp$ tail /etc/fstab
LABEL=TESText4 /media/TESText4 ext4 defaults
LABEL=TESText3 /media/TESText3 ext3 defaults
LABEL=TESText2 /media/TESText2 ext2 defaults
LABEL=TESTntfs1 /media/TESTntfs1 ntfs defaults,rw,uid=1000,gid=1000
LABEL=TESTntfs2 /media/TESTntfs2 ntfs defaults,rw,uid=1000,gid=1000
LABEL=TESTntfs3 /media/TESTntfs3 ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=1000,gid=1000
LABEL=TESTntfsbis /media/TESTntfsbis ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=1000,gid=1000
a@b:/tmp$ 

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

Hors ligne

#166 Le 10/04/2025, à 14:46

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

Salut geole , oui effectivement .

je vois que  tu as testé pour une partition en " EXT2 " , ca a fonctionné tout normalement ? pour l' étiquette notamment ?

--------------------------------------------------------------------------

Sinon , au niveau code , comment proceder pour gerer la chose ?

si l' étiquette choisie est deja existante dans le fstab , il faudrait alors tout simplement ne pas ajouter de ligne dans celui ci ?
admettons , mais ca ne change rien au fait , qu ' un utilisateur peut traiter via ce script une partition qui serait déjà indiquée dans le fstab avec une etiquette differente .
il se retrouvera alors avec 2 étiquettes , 2 lignes dans le fstab , dont une invalide .


il faudrait lire les lignes du fstab une a une , en rechercher chaque block device deja indiqué dans celui-ci et alors 2 possibilités :
soit ne pas proposer au choix celle deja traitée dans le fstab .
soit verifier quel block device correspond à une ligne du fstab et alors , en fonction gerer .
Ca demande de reorganiser entierement le code et de repartir quasiement a zero dans les 2 cas ( peut etre un peu moins pour le 1er cas ) .
ce n' est de toute maniere .

Note : théoriquement , si une partition est deja traitée dans le fstab avec la meme etiquette , le script est censé se stopper avant , et meme pas arriver à la ligne ou il va démonter la partition .
En changeant l' étiquette ben oui forcément ...

du coup , je réitère ma question , comment faire pour enlever une des multiples lignes possibles dans le fstab ??
cette partition peut etre ajoutée , avec son UUID , avec une etiquette differente , avec sont part-uuid , avec son block device , sans compter les autres manières que j' oublie ...

une possibilité serait de recuperer le champ du point de montage dans /etc/mtab , puis de supprimer la ligne dans le fstab correspondant au point de montage , en esperant qu ' il n' y ait qu ' une seule partition de montée a cet emplacement , comme on voit de tout ....

Dernière modification par iznobe (Le 10/04/2025, à 15:26)

Hors ligne

#167 Le 10/04/2025, à 16:20

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

Bon , pas trouvé mieux pour le moment :

      if grep -q "^$Part" /etc/mtab; then # vérifier si la partition est déjà montée
        echo -e "La partition « $Part » est déjà montée !"
        PartMountPoint=$(grep "$Part" /etc/mtab | cut -d " " -f 2)
        umount -v "$Part"
        Num=$(grep -n "$PartMountPoint" /etc/fstab | cut -d ":" -f 1)
        sed -i "${Num}d" /etc/fstab
      fi

je voulais faire directement un :

sed -i /"$PartMountPoint"/d /etc/fstab

Mais pas moyen ...

le script au complet :

#!/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.
# ----------------------------------------------------------------------------

label() {
  local rgx="[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-]"

  while [ -z "$Label" ]; do
    echo -n "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 : "
    read -r Label
    if [[ "$Label" =~ $rgx || "${#Label}" -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 Label
    fi
  done
  for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
    if [[ "$Label" == "$PartLabel" ]]; then
      echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
      exit 7
    fi
  done
}

if ((UID)); then
  echo "Vous devez être super utilisateur pour lancer ce script (essayez avec « sudo »)"
  exit
fi

$(lsblk -no path,label,fstype  |
awk -vi=-1 'BEGIN { print "declare -A ListPart" } \
$NF ~ "ext|ntfs" \
{
j=0 ;
if ($2 ~ /^ext[2-4]$/ || $2 ~ /^ntfs$/) 
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]=""\nListPart["i","++j"]="$2 }
else
{ print "ListPart["++i","j"]="$1"\nListPart["i","++j"]="$2"\nListPart["i","++j"]="$3 }
}')

nbDev=$(( "${#ListPart[@]}"/3 ))

for (( n=0; n<nbDev; n++ )); do
  echo "$(( n+1 )) ⇒ ${ListPart[$n,0]}   ${ListPart[$n,1]}   ${ListPart[$n,2]}"
done

while [ -z "$PartNum" ]; do
  read -p "Choisissez le numéro correspondant à votre future partition de données : " PartNum
  if [[ ! "$PartNum" =~ ^[1-9][0-9]*$ ]]; then # Si la réponse n’est pas un entier positif non nul
    echo "Votre choix doit être un nombre entier compris entre 1 et $nbDev."
    unset PartNum
  elif ! (( PartNum > 0 && PartNum <= nbDev )); then # Si la réponse n’est pas dans le choix proposé
    echo "Votre choix doit être compris entre 1 et $nbDev."
    unset PartNum
  fi
done

Part="${ListPart[$(( PartNum-1 )),0]}"
PartLabel="${ListPart[$(( PartNum-1 )),1]}"
PartFstype="${ListPart[$(( PartNum-1 )),2]}"

if [[ -z "$PartLabel" ]]; then
  echo "La partition « $Part » n’a pas d’étiquette."
  label
else
  echo "La partition « $Part » a l’étiquette « $PartLabel »."
  while [ -z "$Rep" ]; do
    echo -n "Voulez-vous changer l’étiquette de la partition « $Part » ? [O/n] "
    read -r Rep
    case "$Rep" in
      N|n)
        Label="$PartLabel"
    break
      ;;
      Y|y|O|o|"")
        label
        break
      ;;
      *)
        unset Rep
      ;;
    esac
  done
fi

while [ -z "$Rep2" ]; do
  echo -n "Voulez-vous procéder au montage maintenant pour la partition « $Part » en y mettant pour étiquette « $Label » ? [O/n] "
  read -r Rep2

  case "$Rep2" in
    N|n)
      echo -e "Annulation par l’utilisateur !"
      exit 0
    ;;
    Y|y|O|o|"")
      if [ ! -e "$Part" ]; then # vérification que la partition existe bien 
        echo -e "La partition « $Part » n’existe pas !"
        exit 1
      fi
      if ! [[ "$PartFstype" =~ ext[2-4]|ntfs ]]; then # vérifier qu’elle est bien formatée en ext ou ntfs
        echo -e "La partition « $Part » n’est pas au bon format !"
        exit 2
      fi
      if grep -q "$Label" /etc/fstab; then # vérifier si une étiquette du même nom existe dans le fstab
        echo -e "L’étiquette « $Label » est déjà utilisée dans le fstab !"
        exit 4
      fi
      if grep -q "$(lsblk -no uuid "$Part")" /etc/fstab; then # PartUUID est déjà present dans fstab
        echo -e "L’UUID de la partition est déjà présent dans le fstab !"
        exit 5
      fi
      if grep -q "^$Part" /etc/mtab; then # vérifier si la partition est déjà montée
        echo -e "La partition « $Part » est déjà montée !"
        PartMountPoint=$(grep "$Part" /etc/mtab | cut -d " " -f 2)
        umount -v "$Part"
        Num=$(grep -n "$PartMountPoint" /etc/fstab | cut -d ":" -f 1)
        sed -i "${Num}d" /etc/fstab
      fi

      # construction des éléments :
      if [[ "$PartFstype" =~ ext[2-4] ]]; then
        e2label "$Part" "$Label"
        echo "LABEL=$Label /media/$Label $PartFstype defaults" >> /etc/fstab
      elif [[ "$PartFstype" == "ntfs"  ]]; then
        ntfslabel  "$Part" "$Label"
        echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
      fi
      mkdir /media/"$Label" 2>/dev/null
      systemctl daemon-reload
      mount -a 2>/dev/null
    
      mkdir /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
      chown "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label" 2>/dev/null
      mkdir /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
      chown "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null
      chmod 700 /media/"$Label"/.Trash-"$SUDO_UID" 2>/dev/null

      if [ -e /media/"$Label"/.Trash-"$SUDO_UID" ]; then
        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/$Label/$SUDO_USER-$Label »."
      else
        echo "erreur inconnue !"
        exit 6
    fi
      break
    ;;
    *)
      unset Rep2
    ;;
  esac
done

Dernière modification par iznobe (Le 10/04/2025, à 16:22)

Hors ligne

#168 Le 10/04/2025, à 17:35

nany

Re : [ SCRIPT ] pour montage automatique partitions internes

Bonjour,



iznobe a écrit :

je voulais faire directement un :

sed -i /"$PartMountPoint"/d /etc/fstab

Mais pas moyen ...

Peut-être

sed -i "/$PartMountPoint/d" /etc/fstab

?
(Pas testé.)




Sinon je viens de voir, lignes 22 à 27 :

  for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
    if [[ "$Label" == "$PartLabel" ]]; then
      echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
      exit 7
    fi
  done

Pourquoi itérer x fois le même test ?
Ne voulais-tu pas plutôt

  for (( n=0; n<"$nbDev"; n++ )); do # étiquette déjà utilisée ?
    if [[ "$Label" == "${ListPart[$n,1]}" ]]; then
      echo "Erreur, votre étiquette « $Label » est déjà attribuée !"
      exit 7
    fi
  done

?
(Pas testé non plus.)

Hors ligne

#169 Le 10/04/2025, à 17:43

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

Bonjour nany ,

nany a écrit :
iznobe a écrit :

je voulais faire directement un :

sed -i /"$PartMountPoint"/d /etc/fstab

Mais pas moyen ...

Peut-être

sed -i "/$PartMountPoint/d" /etc/fstab

?
(Pas testé.)

d' après mes tests non plus ( passé une heure dessus ... ) . je me demande si ca n' a pas un rapport avec le fait que la variable contient des " / " justement ...


nany a écrit :

Sinon je viens de voir, lignes 22 à 27 :

Vu ligne 64 :

PartLabel="${ListPart[$(( PartNum-1 )),1]}"

cela ne revient il pas au meme ?
j ' ai changé car ça me parait plus lisible .


EDIT , non , ça ne revient pas au même ...

ouarf , tu as l' oeil nany wink
je re modifie le script en 1er message et y inclus la dernière modif en attendant trouver potentiellement quelque chose de mieux .

PS , dans le doute , j' ai retesté :

nany a écrit :
sed -i "/$PartMountPoint/d" /etc/fstab

Mais non .

Dernière modification par iznobe (Le 10/04/2025, à 18:13)

Hors ligne

#170 Le 10/04/2025, à 19:16

geole

Re : [ SCRIPT ] pour montage automatique partitions internes

Cela fonctionne. La ligne a bien été virée

a@b:/tmp$ sudo bash part_data.sh
[sudo] Mot de passe de a : 
1 ⇒ /dev/sda1   ssdWinboot   ntfs
2 ⇒ /dev/sda2   ssdWinXP   ntfs
3 ⇒ /dev/sda3   ssdWin10   ntfs
4 ⇒ /dev/sda4   ssdUbuntu2404   ext4
5 ⇒ /dev/sdb1   WinXP-2To   ntfs
6 ⇒ /dev/sdb2   NosDonnees   ntfs
7 ⇒ /dev/sdb3   Win7-2To   ntfs
8 ⇒ /dev/sdc2   4ToWinXP-2To   ntfs
9 ⇒ /dev/sdc3   4ToWin7-2To   ntfs
10 ⇒ /dev/sdc4   4tossdWinboot   ntfs
11 ⇒ /dev/sdc5   4ToHOME   ext4
12 ⇒ /dev/sdc6   4ToNosDonnees   ntfs
13 ⇒ /dev/sdc7   4ToBigDisk   ntfs
14 ⇒ /dev/sdc8   4ToReserve   ntfs
15 ⇒ /dev/sdc9   4TossdWin10   ntfs
16 ⇒ /dev/sdc11   4ToFamille   ext4
17 ⇒ /dev/sdc12   4tossdWin10-OLD   ntfs
18 ⇒ /dev/sdc13   4TossdUbuntu2404   ext4
19 ⇒ /dev/sdc15   4ToUbuntu   ext4
20 ⇒ /dev/sdd5   ntfs3g   ntfs
21 ⇒ /dev/sdd6   ntfs3   ntfs
22 ⇒ /dev/sdd9   Partage   ext4
23 ⇒ /dev/sdd10   TESText4   ext4
24 ⇒ /dev/sdd11   TESText3   ext3
25 ⇒ /dev/sdd12   TESText2   ext2
26 ⇒ /dev/sdd13   TESTntfs1   ntfs
27 ⇒ /dev/sdd14   TESTntfs2   ntfs
28 ⇒ /dev/sdd15   TESTntfsbis   ntfs
29 ⇒ /dev/md0      ext4
30 ⇒ /dev/md0      ext4
Choisissez le numéro correspondant à votre future partition de données : 28
La partition « /dev/sdd15 » a l’étiquette « TESTntfsbis ».
Voulez-vous changer l’étiquette de la partition « /dev/sdd15 » ? [O/n] 
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 : TESTntfster
Voulez-vous procéder au montage maintenant pour la partition « /dev/sdd15 » en y mettant pour étiquette « TESTntfster » ? [O/n] 
La partition « /dev/sdd15 » est déjà montée !
umount: /media/TESTntfsbis (/dev/sdd15) démonté
-----------------------------------------------------------------
Script pour montage de partition de données terminé avec succès !

Vous pouvez maintenant accéder à votre partition en parcourant le dossier suivant : « /media/TESTntfster/a-TESTntfster ».
a@b:/tmp$ tail /etc/fstab
LABEL=TESText4 /media/TESText4 ext4 defaults
LABEL=TESText3 /media/TESText3 ext3 defaults
LABEL=TESText2 /media/TESText2 ext2 defaults
LABEL=TESTntfs1 /media/TESTntfs1 ntfs defaults,rw,uid=1000,gid=1000
LABEL=TESTntfs2 /media/TESTntfs2 ntfs defaults,rw,uid=1000,gid=1000
LABEL=TESTntfs3 /media/TESTntfs3 ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=1000,gid=1000
LABEL=TESTntfster /media/TESTntfster ntfs3 defaults,nofail,x-gvfs-show,nohidden,uid=1000,gid=1000
a@b:/tmp$ 

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

Hors ligne

#171 Le 10/04/2025, à 19:23

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

Merci pour tes tests @geole wink

j' espère que ca sera utile à la communauté .

Hors ligne

#172 Le 10/04/2025, à 20:13

nany

Re : [ SCRIPT ] pour montage automatique partitions internes

iznobe a écrit :

je me demande si ca n' a pas un rapport avec le fait que la variable contient des " / " justement ...

Ah oui, c’est très certainement à cause de ça.
Dans ce cas :

sed -i "\#$PartMountPoint#d" /etc/fstab

Source.
Bien sûr, $PartMountPoint ne doit pas contenir de croisillon.
Bref, comme on ne connaît pas à l’avance ce que va contenir la variable (à part au moins un slash), ta solution est peut-être meilleure.

Encore que, extrait de mon fstab :

# /media/data was on /dev/sdb3 during curtin installation
/dev/disk/by-uuid/1e8c81ad-ea6c-4993-89d9-b0064fc82344 /media/data ext4 defaults 0 1

Il y a deux lignes avec /media/data et là, ton code va coincer car il y aura deux numéros de ligne.

Solution possible :

        Num=$(grep -n "$PartMountPoint" /etc/fstab | cut -d ":" -f 1 | sort -rV)
        for n in $Num; do
          sed -i "${n}d" /etc/fstab
        done

L’absence de guillemets autour de $Num est volontaire.

Dernière modification par nany (Le 10/04/2025, à 20:38)

Hors ligne

#173 Le 10/04/2025, à 20:50

iznobe

Re : [ SCRIPT ] pour montage automatique partitions internes

bon j ' adopte ta boucle .

C' est possible de mettre un " # " dans un point de montage ?
je m' étonne encore moi-même de m ' étonner de ce que peuvent faire les gens .
C ' est clair qu ' il vaut mieux ne pas prendre de risque , sait on jamais .

Merci nany wink

Hors ligne

#174 Le 10/04/2025, à 21:01

nany

Re : [ SCRIPT ] pour montage automatique partitions internes

Attention, j’ai édité à 20:38:25, il faut mettre sort -rV.

Petites explications : on supprime ligne par ligne car on ne sait pas si les lignes vont être contiguës donc il faut trier par ordre décroissant des numéros (d’où l’importance du V) pout pouvoir supprimer de la dernière à la première ligne sinon il y aurait méprise dans les numéros des lignes.

Hors ligne

#175 Le 10/04/2025, à 21:33

nany

Re : [ SCRIPT ] pour montage automatique partitions internes

iznobe a écrit :

C' est possible de mettre un " # " dans un point de montage ?

Il n’est pas interdit de le mettre dans un nom de répertoire donc je pense que que le dit répertoire peut ensuite servir de point de montage.

Hors ligne