Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2007, 20h48   #1
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 943
Points : 4 943
Par défaut Montage/démontage automatique des clef USB

Bonjour

J'ai fait un petit script bash :
Code :
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
#!/bin/bash
 
drap=`grep "/media/h" /etc/mtab | wc -l`
Xdialog --msgbox "Vous avez $drap clef(s) deja disponbile(s)" 0 0
 
drap=0
 
if [ `grep "/media/h1" /etc/mtab | wc -l` == 1 ] ; then
 Xdialog --yesno "Enleve t'on la clef /mnt/h1 ?" 0 0;\
 case $? in
  0)
   umount /media/h1
   if [ `grep "/media/h1" /etc/mtab | wc -l` == 1 ] ; then
    Xdialog --msgbox "Probleme pour enlever /media/h1.\n Faire la commande suivante pour identifier un utilisateur eventuel de ce peripherique :\n /sbin/fuser  -vm /media/h1" 0 0
   else
    Xdialog --msgbox "Vous pouvez enlever le peripherique /media/h1 sans probleme" 0 0
   fi
   ;;
  1)
   Xdialog --msgbox "le peripherique /media/h1 est conserve" 0 0
   ;;
  255)
   Xdialog --msgbox "le peripherique /media/h1 est conserve" 0 0
   ;;
 esac
else
if [ `grep "/media/h1" /etc/mtab | wc -l` == 0 ] ; then
 if [  `ls -1 /dev/ | grep "sdc1" | wc -l` == 1  ] ; then
  mount /media/h1
  if [ `grep "/media/h1" /etc/mtab | wc -l` == 0 ] ; then
   Xdialog --msgbox "erreur dans le montage de /media/h1" 0 0
  else
   Xdialog --msgbox "/media/h1 est maintenant disponible" 0 0
   drap=1
  fi
 fi
fi
fi
 
if [ `grep "/media/h2" /etc/mtab | wc -l` == 1 ] ; then
 Xdialog --yesno "Enleve t'on la clef /mnt/h2 ?" 0 0;\
 case $? in
  0)
   umount /media/h1
   if [ `grep "/media/h1" /etc/mtab | wc -l` == 1 ] ; then
    Xdialog --msgbox "Probleme pour enlever /media/h2.\n Faire la commande suivante pour identifier un utilisateur eventuel de ce peripherique :\n /sbin/fuser  -vm /media/h2" 0 0
   else
    Xdialog --msgbox "Vous pouvez enlever le peripherique /media/h2 sans probleme" 0 0
   fi
   ;;
  1)
   Xdialog --msgbox "le peripherique /media/h2 est conserve" 0 0
   ;;
  255)
   Xdialog --msgbox "le peripherique /media/h2 est conserve" 0 0
   ;;
 esac
else
if [ `grep "/media/h2" /etc/mtab | wc -l` == 0 ] ; then
 if [ `ls -1 /dev/ | grep "sdd1" | wc -l` == 1 ] ; then
  mount /media/h2
  if [ `grep "/media/h2" /etc/mtab | wc -l` == 0 ] ; then
   Xdialog --msgbox "erreur dans le montage de /media/h2" 0 0
  else
   Xdialog --msgbox "/media/h1 est maintenant disponible" 0 0
   drap=1
  fi
 fi
fi
fi
 
if [ $drap == 0 ] ; then
 drap=`grep "/media/h" /etc/mtab | wc -l`
 Xdialog --msgbox "Aucune nouvelle clef rajoutee !\n $drap clef(s) actuellement disponible" 0 0
fi
Il va avec les lignes suivantes du fstab :
Code :
1
2
/dev/sdc1 /media/h1 vfat umask=0022,users,iocharset=utf8,sync,noauto,exec 0 0
/dev/sdd1 /media/h2 vfat umask=0022,users,iocharset=utf8,sync,noauto,exec 0 0
Je veux bien le donner à dvp.com pour un script d'exemple, mais j'aimerai pouvoir apporter quelques améliorations :
1)
Code :
1
2
 else
 if [ `grep "/media/h2" /etc/mtab | wc -l` == 0 ] ; then
Pourquoi si je mets elif, ça plante ?
2)
Code :
 if [ `ls -1 /dev/ | grep "sdd1" | wc -l` == 1 ] ; then
Il doit y avoir plus simple pour dire que le périphérique existe !
3)
Comment faire pour activer l'affichage du Xdialog correctement avec les accents ?
Sans l'erreur suivante dès qu'on met un accent dans le texte et avec l'accent dans le texte :
Code :
(Xdialog:9443): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2007, 10h48   #2
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 943
Points : 4 943
J'ai amélioré le code, mais mais questions restent les mêmes...
Code :
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
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h43.


 
 
 
 
Partenaires

Hébergement Web