IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Montage/démontage automatique des clef USB


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut Montage/démontage automatique des clef USB
    Bonjour

    J'ai fait un petit script bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     else
     if [ `grep "/media/h2" /etc/mtab | wc -l` == 0 ] ; then
    Pourquoi si je mets elif, ça plante ?
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     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 : Sélectionner tout - Visualiser dans une fenêtre à part
    (Xdialog:9443): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    J'ai amélioré le code, mais mais questions restent les mêmes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

Discussions similaires

  1. [WD16] Liste des clefs USB
    Par thierrybatlle dans le forum WinDev
    Réponses: 1
    Dernier message: 18/08/2011, 09h37
  2. retirer automatiquement des périphériques USB au démarage.
    Par Pierre GIRARD dans le forum Windows
    Réponses: 10
    Dernier message: 09/09/2010, 18h43
  3. KDE sous Ubuntu : gestion des clefs USB
    Par troumad dans le forum Ubuntu
    Réponses: 2
    Dernier message: 12/05/2009, 20h40
  4. Réponses: 2
    Dernier message: 31/10/2008, 23h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo