#301 Hier à 19:46
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
Bon , j ' ai modifié les 2 elifs ( ligne 58 ) à la suite ( soit je n' ai pas compris l ' intérêt , soit y avait un truc bizzare ) :
j ' ai modifié pour :
elif [[ -d $mp && $mp =~ $rgx ]]; then
rmdir -v "$mp"
else
echo "$mp n’a pas été supprimé."
fi
bref , là ca fait ce que ca dit , et ca dit ce que ca fait :
Voulez-vous démonter la partition « /dev/nvme0n1p12 » de son emplacement actuel et procéder aux changements pour la monter avec l'étiquette « toi » ? [O/n]
umount: /media/moi (/dev/nvme0n1p12) démonté
rmdir: suppression du répertoire, '/media/moi'
mkdir: création du répertoire '/media/toi'
mkdir: création du répertoire '/media/toi/iznobe-toi'
appartenance de '/media/toi/iznobe-toi' modifiée de root:root en iznobe:iznobe
-----------------------------------------------------------------
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/toi/iznobe-toi ».
iznobe@iznobe-PC:~/Scripts$
et 2 autres bricoles :
#!/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
label() {
local rgx="[^[:alnum:]_-]"
while [ -z "$Label" ]; 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 : " 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
if lsblk -no label | grep -q "$Label"; then
echo "Erreur, votre étiquette « $Label » est déjà attribuée ! Choisissez en une autre."
unset Label
fi
done
}
unmount() {
local rgx="^(/mnt/|/media/).+$"
local mp
mp="$(grep "$Label" /etc/fstab | cut -d ' ' -f 2)"
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 « $Label » ? [O/n] "
case "$REPLY" in
N|n)
echo "Annulation par l’utilisateur !"
exit 0
;;
Y|y|O|o|"")
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 && $pmp =~ $rgx ]]; then
rmdir -v "$pmp"
else
echo "$pmp n’a pas été supprimé."
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
elif [[ -d $mp && $mp =~ $rgx ]]; then
rmdir -v "$mp"
else
echo "$mp n’a pas été supprimé."
fi
sed -i "/$(lsblk -no uuid "$Part")/d" /etc/fstab
sed -i "/$Label/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."
label
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)
Label="$PartLabel"
break
;;
Y|y|O|o|"")
label
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 « $Label » ? [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 !"
unmount
elif grep -Eq "(LABEL=|by-label/)$Label" /etc/fstab; then
echo "L’étiquette « $Label » est déjà utilisée dans le fstab !"
unmount
elif grep -q "^$Part" /etc/mtab; then
echo "La partition « $Part » est déjà montée !"
unmount
fi
# construction des éléments :
if [[ $PartFstype =~ ext[2-4] ]]; then
e2label "$Part" "$Label"
echo "LABEL=$Label /media/$Label $PartFstype defaults,nofail,x-systemd.device-timeout=1" >> /etc/fstab
elif [ "$PartFstype" == "ntfs" ]; then
ntfslabel "$Part" "$Label"
echo "LABEL=$Label /media/$Label ntfs3 defaults,nofail,x-systemd.device-timeout=1,x-gvfs-show,nohidden,uid=$SUDO_UID,gid=$SUDO_GID" >> /etc/fstab
fi
if ! [ -d /media/"$Label" ]; then
mkdir -v /media/"$Label"
fi
systemctl daemon-reload
if ! mount -a
then
exit 4
fi
if ! [ -d /media/"$Label"/"$SUDO_USER"-"$Label" ]; then
mkdir -v /media/"$Label"/"$SUDO_USER"-"$Label"
fi
chown -c "$SUDO_USER": /media/"$Label"/"$SUDO_USER"-"$Label"
if ! [ -d /media/"$Label"/.Trash-"$SUDO_UID" ]; then
mkdir -v /media/"$Label"/.Trash-"$SUDO_UID"
fi
chown -c "$SUDO_USER": /media/"$Label"/.Trash-"$SUDO_UID"
chmod -c 700 /media/"$Label"/.Trash-"$SUDO_UID"
if [ -d /media/"$Label"/.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/$Label/$SUDO_USER-$Label »."
else
echo "erreur inconnue !"
exit 5
fi
break
;;
*)
;;
esac
done
Dernière modification par iznobe (Hier à 20:16)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#302 Hier à 20:05
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
on peut mettre un " elif " sans d' abord avoir un " if " ???
ligne 56 a 59 .
Non, c’est une mauvaise indentation qui t’a induit en erreur.
Hors mis les " < < " , qu' est ce que cella fait en français ?
< <(command) : Cette syntaxe utilise la substitution de processus pour rediriger la sortie de command vers l'entrée standard de la boucle while. Cela signifie que la sortie de command est traitée ligne par ligne par la boucle.
un test au pif :
umount: /media/iznobe/test (/dev/nvme0n1p12) démonté
/media/iznobe/test n’a pas été supprimé.
mkdir: création du répertoire '/media/moi'
mkdir: création du répertoire '/media/moi/iznobe-moi'
appartenance de '/media/moi/iznobe-moi' modifiée de root:root en iznobe:iznobe-----------------------------------------------------------------
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/moi/iznobe-moi ».
iznobe@iznobe-PC:~/Scripts$c' est voulu ?
En ligne
#303 Hier à 20:14
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
En fait c' est du au second elif , mal indenté , je l' ai supprimé pour le modifier en " else " a la place .
voir les dernier modifs / script de mon dernier message .
Ça a l' air d' aller comme ça .
Dernière modification par iznobe (Hier à 20:24)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#304 Hier à 20:17
- nany
Re : [ SCRIPT ] pour montage automatique partitions internes
( soit je n' ai pas compris l ' intérêt , soit y avait un truc bizzare )
Je pense plutôt à un truc bizarre.
et 2 autres bricoles
Peux-tu préciser ?
Et, si j’ai bien compris, la version à 80 colonnes ne te sied pas. Dommage.
En ligne
#305 Hier à 20:23
- iznobe
Re : [ SCRIPT ] pour montage automatique partitions internes
et 2 autres bricoles
nany a écrit :Peux-tu préciser ?
l ' une est l' affichage des partitions , pour etre " raccord " avec le echo final et une vue plus aérée .
l' autre c' est la fonction label , je me suis dis que plutot que d ' arreter le script , il etait preferable de demander à l' utilisateur d ' entrer un autre label :
label() {
local rgx="[^[:alnum:]_-]"
while [ -z "$Label" ]; 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 : " 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
elif lsblk -no label | grep -q "$Label"; then
echo "Erreur, votre étiquette « $Label » est déjà attribuée ! Choisissez en une autre."
unset Label
fi
done
}
rien de folichon . j ' espere juste ne pas avoir fait de bourde
Mais je suis pas certain du truc , car cette partie me parait pas claire :
Y|y|O|o|"")
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 && $pmp =~ $rgx ]]; then
rmdir -v "$pmp"
else
echo "$pmp n’a pas été supprimé."
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
elif [[ -d $mp && $mp =~ $rgx ]]; then
rmdir -v "$mp"
else
echo "$mp n’a pas été supprimé."
fi
je verrais ca plutot sans elif non ?
Y|y|O|o|"")
mapfile -t PartMountPoints < <(grep "$Part" /etc/mtab | cut -d " " -f 2)
if [ -n "${PartMountPoints[0]}" ]; then
...
traitement
...
if [[ -d $mp && $mp =~ $rgx ]]; then
rmdir -v "$mp"
else
echo "$mp n’a pas été supprimé."
fi
Dernière modification par iznobe (Hier à 21:49)
retour COMPLET et utilisable de commande | script montage partition ext4
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne