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 commandes conditionnelles [Débutant(e)]


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Passioné d'info
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Passioné d'info
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Par défaut Problème commandes conditionnelles
    Bonjour à tous,

    Je suis tout nouveau sur le forum, et m'inscris dans le but de progresser dans les commandes bash que j'apprends depuis peu

    Après plusieurs cours lu sur Internet et multiples essais, je me suis décidé à faire mon premier "vrai" script.

    Il consiste tout simplement à paramétrer le txpower de ma carte wifi (2 cartes, une PCI, une USB, la dîte interessé étant la usb (wlan1))

    J'ai plus ou moins réussi à écrire mon script.

    Mes deux soucis sont :

    - Mes commandes conditionnelles fonctionnent lorsque je réponds "Yes" ou "Y" mais me renvoi une erreur lorsque je saisie non ("n" ou "no"). J'ai problablement fait une (plusieurs?) grossière erreur mais en parcourant plusieurs tutos, je ne parviens pas à trouver où ?

    - Mon deuxième soucis est, lui, plus ambitieux et plus compliqué (et moins prioritaire que le premier), j'aimerais que mon script renvoi un choix pour selectionner mon périphériques wifi après les avoirs detéctés ? (wlan0 ou wlan1, choix 1 ou 2)

    Merci pour ceux qui pourrait me filer un coup de main, un indice, ou une solution

    Ci-dessous mon script (et mes retours d'erreur) :

    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
     
     
    #!/bin/bash
    # Wifi TXPOWER fixing
     
    #Colors
    white="\033[1;37m"
    grey="\033[0;37m"
    purple="\033[0;35m"
    red="\033[1;31m"
    green="\033[1;32m"
    yellow="\033[1;33m"
    Purple="\033[0;35m"
    Cyan="\033[0;36m"
    Cafe="\033[0;33m"
    Fiuscha="\033[0;35m"
    blue="\033[1;34m"
    transparent="\e[0m"
    bold="\033[1;1m"
     
    clear
    my_message="Hello $USER"
    echo -e $yellow$my_message
    sleep 0.5s
    echo  -e $blue"Today is"$red;date
    sleep 0.5s
     ifconfig wlan1 down
     echo -e $yellow"Turning down wlan..."$transparent
     sleep 1s
     iw reg set GY
     echo -e $red"Wifi Region : GY"$transparent
     sleep 1s
     iw reg get
     sleep 1s
    echo -n "Country has well been set to GY ? Y/N :"
    read yesno
     
    if [ $yesno = "y" ] ||*[ $yesno = "Y" ]
     
    then 
    	echo $Yellow"Next step ..."
     
    elif [ $yesno = "n"*] || [ $yesno = "N" ]
     
    then
    	echo $blue"OOPS ..."
     
    else 
    	echo ''Please type Y or N ... not &yesno ''
     
    fi
     
     iwconfig wlan1 txpower 30
     
     echo -e $red"Setting txpower 30 ..."$transparent
     
     sleep 1s
     
     ifconfig wlan1 up
     
     echo -e $yellow"Wifi back up ..."$transparent
     
     sleep 1s
     
     echo -e $yellow"Checking iwconfig now ..."$transparent
     
     sleep 1s
     iwconfig
     
    echo -n "Did all went fine ? Y/N : "
    read yesno
    if [ "$yesno" = "y" ] ||*[ "$yesno" = "Y" ] ; then
     echo "Ok, quitting now ..."
    elif [ "$yesno" = "n" ] ||*[ "$yesno" = "N" ] ; then 
    echo "Thanks you to verify that wlan1 device is connected and try again"
    sleep 1s
    echo "Quitting now..."
    else 
    echo '' Please, type Y or N, not $yesno ''
    fi
    sleep 1s


    L'erreur retournée au premier "no" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Country has well been set to GY ? Y/N :n
    ./wifi-pwr.sh: ligne 36: *[ : commande introuvable
    ./wifi-pwr.sh: ligne 41 : [: « ] » manquant
    Please type Y or N ... not
    ./wifi-pwr.sh: ligne 47: yesno : commande introuvable
    Au deuxième :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    Did all went fine ? Y/N : n
    ./wifi-pwr.sh: ligne 70: *[ : commande introuvable
    Thanks you to verify that wlan1 device is connected and try again
    Quitting now...

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    pourquoi des astérisques constellent-ils ton code ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Passioné d'info
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Passioné d'info
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Par défaut
    Oula effectivement ..
    Je les ai sur le forum aussi mais pas dans mon script quand je l'ouvre ...

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Passioné d'info
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Passioné d'info
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Par défaut
    Je comprends pas ... dans mon script ouvert avec nano ou le bloc note je n'ai rien ...
    j'ai :

    ./wifi-pwr.sh: ligne 36: *[ : commande introuvable
    ./wifi-pwr.sh: ligne 41 : [: « ] » manquant

    EDIT : et même ce code que je viens de coller (volontairement sans balise code) il n'y a pas d'astérisque normalement, je n'y comprends plus rien
    EDIT : J'ai bêtement résolu le premier soucis en faisant copier collé du code mise sur le forum, enlevé les astérisques et copié/collé dans mon script avec le bloc note ... Je ne comprends pas pourquoi il y a des astérisques qui apparaissent ici sur le forum et pas dans mes scripts ou mon terminal ...

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Il faudrait revoir ton éditeur de texte car ces "étoiles" n'ont rien à faire dans tes tests. De même en ligne 49 il est écrit echo ''Please type Y or N ... not &yesno'' ben déjà ce n'est pas "&yesno" mais "$yesno" et ensuite j'ai l'impression que tes guillemets doubles sont en réalité deux apostrophes accolées. Ce qui n'est certainement pas une bone idée.

    Par ailleurs je trouve la construction if [ $yesno = "y" ] || [ $yesno = "Y" ] assez malavisée car tu appelles deux fois une instruction de test et tu renvoies le travail d'évaluation de la logique de l'ensemble à un outil du shell (le double "|") qui n'avait pas été prévu pour ça à l'origine. Je préfère perso utiliser le connecteur "or" du test => if [ "$yesno" = "y" -o "$yesno" = "Y" ] qui est alors appelé qu'une fois et qui se charge de vérifier la logique de l'expression. Mais surtout, dans tous les cas, chaque fois que tu compares une variable avec une chaine, toujours toujours toujours mettre des guillemets doubles autour de la variable (comme je l'ai écrit). Ca permet au test de ne pas se retrouver bancal avec "rien à comparer" dans le cas d'une variable vide parce que là il râle et le message est assez incompréhensible au premier abord (il indique qu'il attend un opérateur unaire, ce qui est normal puisque dans le cas d'une variable vide il ne voit qu'un seul élément à comparer, mais il faut avoir réfléchi un petit moment pour comprendre ce détail).

    Et enfin quand on a plus de deux alternatives (oui, non, autre chose) comme toi, autant partir sur du case...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    echo -n "Country has well been set to GY ? Y/N :"
    read yesno
    case "$yesno" in
        [yY])
            echo "$YellowNext step ..."
            ;;
        [nN])
            echo "$blueOOPS ..."
            ;;
        *)
           echo "Please type Y or N ... not $yesno"
    esac
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Passioné d'info
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Passioné d'info
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Par défaut
    Ben écoute merci beaucoup Sve@r tout fonctionne parfaitement j'ai effectivement appliqué la fonction case

    Je passe en résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème compilation conditionnelle
    Par salseropom dans le forum Linux
    Réponses: 5
    Dernier message: 16/10/2007, 16h08
  2. problème commande shell compilation auto
    Par ludovic85 dans le forum C#
    Réponses: 1
    Dernier message: 07/02/2007, 12h28
  3. Problème commandes shell-trop d'arguments
    Par SuperCed dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/12/2006, 12h57
  4. Problème de conditionnelle
    Par Konal dans le forum Scheme
    Réponses: 3
    Dernier message: 16/12/2006, 17h24
  5. Commande conditionnelle avec cmd.exe
    Par lastrecrue dans le forum Windows XP
    Réponses: 1
    Dernier message: 31/08/2006, 16h27

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