1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
| #!/bin/bash
# Les points de montages des clefs à monter doivent être définies dans /etc/fstab
# dans le répertoire /media comme /media/clef1 par une ligne semblable à :
# /dev/sdc1 /media/h1 vfat umask=0022,users,iocharset=utf8,sync,noauto,exec 0 0
enleve()
{
Xdialog --title $2 --yesno "Enleve t'on la clef $2 sur $1" 0 0
case $? in
0)
umount $2
if [ "$(grep $2 /etc/mtab)" ] ; then
Xdialog --title "Erreur" --msgbox "Probleme pour enlever $2 sur $1.\n Faire la commande suivante pour identifier un utilisateur eventuel de ce peripherique :\n /sbin/fuser -vm $2" 0 0
return 0
else
Xdialog --title "OK" --msgbox "Vous pouvez enlever le peripherique $2 sans probleme" 0 0
return 1
fi
;;
1)
Xdialog --title "$2" --msgbox "le peripherique $2 est conserve" 0 0
return 0
;;
255)
Xdialog --title "$2" --msgbox "le peripherique $2 est conserve" 0 0
return 0
;;
esac
}
mettre()
{
Xdialog --title "$2" --yesno "Met t'on la clef $2 sur $1" 0 0
case $? in
0)
mount $2
if [ `grep "$2" /etc/mtab | wc -l` == 0 ] ; then
Xdialog --title "Erreur" --msgbox "erreur dans le montage de $1 sur $2" 0 0
else
Xdialog --title "$2" --msgbox "$2 est maintenant disponible" 0 0
return 1
fi
;;
1)
return 0
;;
255)
return 0
;;
esac
return -100
}
enleveligne()
{
# if [ `grep "$2" /etc/fstab | wv -l` == 0 ] ; then
if [ ! "$(grep "$2" /etc/fstab)" ] ; then
# a=0
#else
enleve $1 $2
return $?
fi
return 0
}
drap=`grep "/media/h" /etc/mtab | wc -l`
if [ $drap == 0 ] ; then
mes="Aucune clef déjà montée"
else
mes="$drap clef(s) déjà montée(s)"
fi
while read line; do
set -- $(echo "$line") # découper la ligne en morceaux par Christophe Gaubert
if [ "(grep "$2" /etc/mtab)" ] ; then
#mes=$(echo $mes "\n/media/h2 disponible")
mes="$mes\n$2 disponible"
else
if [ -b "$1" ] ; then
#mes=$(echo $mes "\n/media/h2 branché, mais non disponible")
mes="$mes\n$2 branché, mais non disponible"
fi
fi
done < <(grep "/media/" /etc/fstab | grep -v floppy | grep -v cdrom)
Xdialog --title "Etat d'origine" --msgbox "$mes" 0 0
drap=0
while read line; do
set -- $(echo "$line") # découper la ligne en morceaux par Christophe Gaubert
if [ "$(grep $2 /etc/mtab)" ] ; then
enleve $line
elif [ -b $1 ] ; then
mettre $line
drap=`echo $(($drap+$?))`
fi
done < <(grep "/media/" /etc/fstab | grep -v floppy | grep -v cdrom)
grep "/media/" /etc/mtab | grep -v floppy | grep -v cdrom | while read LINE ; do
enleveligne $LINE
done
if [ $drap == 0 ] ; then
deb_mes="Aucune nouvelle clef rajoutee !"
else
deb_mes="$drap clef(s) rajoutée(s)"
fi
drap=0
mes="\n"
# méthode 1 avec fichier temporaire par BlaireauOne
#mkfifo PipeLine
#grep "/media/" /etc/mtab | grep -E -v "(floppy|cdrom)" > PipeLine &
#while read LINE ; do
# ((drap=drap+1))
# mes=$(echo "$mes \n$LINE")
#done < PipeLine
#rm PipeLine
# méthode 2 non posix par Christophe Gaubert
# elle demande d'avoir #!/bin/bash au début du fichier
# Quand bash est appelé en tant que "sh", il est en mode restreint.
#while read line; do
# drap=$((drap+1))
# mes="$mes\n$line"
#done < <(grep "/media/" /etc/mtab | grep -v floppy | grep -v cdrom)
# La notation <( ) crée un file descriptor temporaire.
# méthode 3 par BlaireauOne
# => erreur, soit on laisse comme c'est et on concatène la sortie en une seule ligne
# soit on enlève les " autour de la sortie du grep et on traite séparément tous les mots de chaque ligne
# IFS = Internal Field Separator. Ca indique au shell comment découper les tokens.
# Par défaut,, il utilise l'espace, la tabulation et le retour ligne. Ma ligne indique que
# le seul séparateur de mots est le retour ligne. Par LLB
IFS_OLD="$IFS" # pour info : IFS=$(echo -e " \t\n")
IFS="
"
for LINE in $(grep "/media/" /etc/mtab | grep -E -v "(floppy|cdrom)") ; do
((drap=drap+1))
mes="$mes\n$LINE"
done
IFS="$IFS_OLD" # retour à l'ancienne configuration
if [ $drap == 0 ] ; then
#mes=$(echo "$deb_mes\n\nAucune clef dispobible")
mes="$deb_mes\n\nAucune clef dispobible"
else
#mes=$(echo "$deb_mes\n\n$drap clef(s) disponible(s) :$mes")
mes="$deb_mes\n\n$drap clef(s) disponible(s) :$mes"
fi
Xdialog --title "Bilan" --msgbox "$mes" 0 0 |
Partager