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 :

probléme avec une réponse oui ou non


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Par défaut probléme avec une réponse oui ou non
    bonjour
    je commence tout juste le scripting en shell. j'ai réaliser un script pour ajouter mes utilisateur samba de part un fichier txt du nom persons le script s'execute correctement mais il ne me demande pas si je veux continuer en rentrant la lettre o ou alors n pour non
    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
    # !/bin/sh	
    #
    function choisir ()
    {
    choix=''
    #local invite ="$*"
    local reponse
     read -p "$reponse" reponse
    case "$reponse" in
     [oO] ) choix='o';;
     [nN] ) choix='n';;
     *		) choix="$reponse";;
    esac
    }
     # lecture du fichier persones
     	 cat persones | while true 
    do
    read ligne
    if [ "$ligne" == "" ]
    then
        echo "fin du fichier persones"
         break
    fi
     
    set -- $ligne
     
    login=$1
    pass=$2
     
    if [ -d "/home/$1" ]
    then
        echo "le compte $1 exise deja"
    else
    	 printf "ete vous sur de vouloir ajouter l'utilisateur $1 \n"
    	 echo "pour continuer entre o/N:"	 
       function choisir ()
    	 if [ "$reponse" = "o" ]; then	
    	 	 echo "creation du compte $login"
         useradd $1 
         echo "creation du compte samba $login"
         (echo $pass ; echo $pass) | smbpasswd -a -s $login
     
     	  else
     
     	  echo "le compte $1 n'a pas etait crée"
    	fi
    fi
    done
    quand je viens à executer le script il me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # ./fonctionchoisir.sh
    ete vous sur de vouloir ajouter l'utilisateur olivier2
    pour continuer entre o/N:
    fin du fichier persones
    il ne me demande pas d'ecrire o ou n est la je commence à sécher

    merci à vous pour votre aide

  2. #2
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Bonjour,

    Ta fonction est mal définie et mal appelée. La syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #définition d'une fonction
    #1ere possibilité
    function choisir {
    }
     
    #2eme possibilité
    choisir() {
    }
     
    #Appel de la fonction
    echo "J'appelle la fonction choisir"
    choisir
    echo "C'est fait"
    Je ne vois pas trop à quoi te sert ta fonction choisir() avec le case puisque tu refais une sélection suivant la réponse par la suite avec un if.

    Je te propose donc de supprimer ta fonction qui est inutile :
    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
    # !/bin/sh	
    #
    # lecture du fichier persones
    cat persones | while true 
    do
    read ligne
    if [ "$ligne" == "" ]
    then
    	echo "fin du fichier persones"
    	break
    fi
     
    set -- $ligne
     
    login=$1
    pass=$2
     
    if [ -d "/home/$1" ]
    then
    	echo "le compte $1 exise deja"
    else
    	printf "ete vous sur de vouloir ajouter l'utilisateur $1 \n"
    	echo "pour continuer entre o/N:"	 
    	read reponse
    	case $reponse in
    		o|O)
    			echo -e "Creation du compte $login"
    			useradd $1
    			echo -e "Creation du compte samba $login"
    			(echo $pass ; echo $pass) | smbpasswd -a -s $login
    			;;
    		n|N)
    			echo "le compte $1 n'a pas etait crée"
    			;;
    	esac
    fi
    done
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Par défaut
    je viens d'appliquer les modifications, et il me reste une petite erreur que voici "je continue à chercher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # ./fonctionchoix.sh
    ete vous sur de vouloir ajouter l'utilisateur olivier2
     
    pour continuer entre (oui/non) :Erreur, vous deviez répondre par oui ou par non.fin du fichier persones
    voici le code modifier
    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
    # !/bin/sh	
    #
    # lecture du fichier persones
     	 cat persones | while true 
    do
    read ligne
    if [ "$ligne" == "" ]
    then
        echo "fin du fichier persones"
         break
    fi
     
    set -- $ligne
     
    login=$1
    pass=$2
     
    if [ -d "/home/$1" ]
    then
        echo "le compte $1 exise deja"
    else
    	 echo "ete vous sur de vouloir ajouter l'utilisateur $1"
    	 echo ""
    	 echo -n "pour continuer entre (oui/non) :"	 
          read reponse
          case $reponse in 
           o|O|oui) 
    		 	 echo -e "creation du compte $login"
              useradd $1 
         			echo "creation du compte samba $login"
         			(echo $pass ; echo $pass) | smbpasswd -a -s $login;;
     
     	  n|N|non)
     
     	  		echo -e "le compte $1 n'a pas etait crée";;
     	  		*) echo "Erreur, vous deviez répondre par oui ou par non.";;
          esac
     
    fi
    done

  4. #4
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut
    Attention à l'utilisation de la fonction read
    Que lisez vous ?
    le contenu du fichier "personnes" ou le l'entrée Std
    précisez le

    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
    # !/bin/sh
    
    Mon_TTY=`tty`
    #
    # lecture du fichier persones
    
    while read ligne
    do
       set -- $ligne
       login=$1
       pass=$2
    
       if [ -d "/home/$1" ]
       then
           echo "le compte $1 exise deja"
       else
          echo "ete vous sur de vouloir ajouter l'utilisateur $1"
          echo "pour continuer entre (oui/non) : \c"
          read reponse < $Mon_TTY
          case $reponse in
           o|O|oui)
                        echo  "creation du compte $login"  
                        useradd $1
                        echo "creation du compte samba $login"
                        (echo $pass ; echo $pass) | smbpasswd -a -s $login;;
    
           n|N|non)
    
                   echo -e "le compte $1 n'a pas etait crée";;
                   *) echo "Erreur, vous deviez répondre par oui ou par non.";;
          esac
    
       fi
    done < personnes

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Par défaut
    merci de ta reponse cela fonctionne mais je ne comprend pas se que tu à fais peut tu essayer de m'expliquer, je te remerci à l'avance pour ton aide et ton explication

  6. #6
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut
    Ici on affecte dans la variable "$Mon_TTY" le nom du terminal sur lequel on est connecté
    ce nom est obtenu à partire de la commande "tty"
    avec les "quotes" inversées : c'est le resultat de la commande "tty" qui est renseignée dans la variable $Mon_TTY
    cf : man tty
    la réponse est attendu à partir du terminal (Lecture de l'entrée Std)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     read reponse < $Mon_TTY
    Tant que l'on peu lire une "ligne" du fichier "personne"
    affiche le contenu de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read ligne
    do
       echo $ligne
    done < personnes

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Par défaut
    Citation Envoyé par lavazavio Voir le message
    Bonjour,

    Ta fonction est mal définie […]. La syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #définition d'une fonction
    #1ere possibilité
    function choisir {
    }
     
    #2eme possibilité
    choisir() {
    }
    Je me permets d'affirmer le contraire, la définition de la méthode était tout à fait correcte. Voici ce que dit le man(uel) de bash:
    Shell Function Definitions
    A shell function is an object that is called like a simple command and
    executes a compound command with a new set of positional parameters.
    Shell functions are declared as follows:

    [ function ] name () compound-command [redirection]
    Voici ce que dit le man(uel) de zsh(misc):
    function word ... [ () ] [ term ] { list }
    word ... () [ term ] { list }
    word ... () [ term ] command
    Donc on voit que la syntaxe dépend du shell. On voit aussi qu'utiliser "function" et "()" est tout à fait autorisé.

    Note: La mot clef "function" est optionelle pour des raisons de compatiblité ascendante avec le shell historique avec sh.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/08/2011, 15h39
  2. Problème avec une dll non chargé (ou presque)
    Par Veler dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 19/01/2010, 06h39
  3. Problème avec une Div sous firefox et non sous IE
    Par Phpdebut dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 11/01/2010, 11h52
  4. Problème avec une fonction non static
    Par Coco4486 dans le forum C++
    Réponses: 17
    Dernier message: 09/05/2008, 11h49
  5. [AJAX] Réponse XML
    Par sylsau dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/12/2006, 23h50

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