Problème avec un case en Bash

Fermé
all94 Messages postés 76 Date d'inscription mardi 15 mai 2012 Statut Membre Dernière intervention 25 février 2015 - Modifié par all94 le 20/08/2013 à 10:57
jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 - 10 sept. 2013 à 09:51
Bonjour,

j'ai un grand soucis et je n'arrive pas à le débuger. Je dévellope un logiciel et en l'occurence son assistant d'installation en Bourne Again Shell mais problème j'ai créer 3 fonctions et par le biais d'un case je souhaite rediriger l'utilisateur sur ces trois fonctions. Voici donc le code incriminé :

clear
echo
echo "  ___________________________________________________________________________"
echo " !               +===========================================+               !"
echo " !               +  Minecraft Portable Installator by All94  +               !"
echo " !               +                   V1.0                    +               !"
echo " !               +===========================================+               !"
echo " !                                                                           !"
echo " !                                                                           !"
echo " !                                                                           !"
echo " !                          **********************                           !"
echo " !                          *   Menu Principal   *                           !"
echo " !                          **********************                           !"
echo " !                                                                           !"
echo " !                                                                           !"
echo " !                       1 - Lancer l'installation                           !"
echo " !                                                                           !"
echo " !                       2 - Lire les licences et crédits                    !"
echo " !                                                                           !"
echo " !                       3 - Quitter l'assistant                             !"
echo " !___________________________________________________________________________!"
echo
read -p "> " choice
case $choice in
 1)
  install
  ;;
 2)
  licence inmenu
  ;;
 3)
  quit
  ;;
 *)
  reload
  ;;
esac


Si il a besoins que je dévoile l'intégralité de mon code source (ce qui me dérange pas car le logiciel est libre et opensource via la GNU LGPL 3) je le ferais.

Merci d'avance,
codialement all94.

4 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
20 août 2013 à 12:19
Salut,

Et c'est quoi le souci ???

0
all94 Messages postés 76 Date d'inscription mardi 15 mai 2012 Statut Membre Dernière intervention 25 février 2015 5
20 août 2013 à 12:31
Et bien le problème est qu'il prend pas justement en compte ce case et me redirige toujours vers la fonction install et aucune autres.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
20 août 2013 à 13:30
A mon avis il y a un problème ailleurs parce qu'avec un copier coller de ton "case...esac" et juste des echo en plus, chez moi ça marche ;-(

Donc, oui, affiche l'intégralité de ton script.

Tu peux aussi rajouter un "set -x" en début pour déboguer ton script.
0
jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 306
10 sept. 2013 à 09:51
Totalement d'accord, je n'ai pas l'impression que le problème vienne du case, il me semble propre.
Le problème vient d'ailleurs.
0
all94 Messages postés 76 Date d'inscription mardi 15 mai 2012 Statut Membre Dernière intervention 25 février 2015 5
Modifié par all94 le 20/08/2013 à 13:43
Bonjour,

voila le code source : Lien

Pour ce qui est du débugage, j'utilise la commande bash --debug <nom du fichier>.sh

Cordialement, all94
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
20 août 2013 à 14:52
if [ $1=ininstall ]
Ben déjà il faut des espaces autour du signe égale ;('
Ensuite il vaut mieux quoter tes variables pour des tests entre crochets simples (ce n'est pas obligatoire avec des crochets doubles).

if [ "$1" = "ininstall" ]


if [! -f lgpl.txt]
Idem, il faut un espace avant et après les crochets !!!

if [ ! -f lgpl.txt ]


A modifier pour tous tes tests ;-\
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
20 août 2013 à 15:51
Pour ce qui est du débugage, j'utilise la commande bash --debug <nom du fichier>.sh
Et tu n'as rien vu passer ???

MC_P_Install.sh: ligne 351: [! : commande introuvable
lgpl.txt: Aucun fichier ou dossier de ce type

Missing filename ("less --help" for help)
rm: impossible de supprimer «licencebyf2ko.txt»: Aucun fichier ou dossier de ce type

MC_P_Install.sh: ligne 43: [! : commande introuvable
MC_P_Install.sh: ligne 53: ./browse: Aucun fichier ou dossier de ce type

MC_P_Install.sh: ligne 170 : [: launcher : opérateur unaire attendu


Et encore j'ai arrêté avant la fin ;-(
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
20 août 2013 à 13:41
Avec ce script :
$ cat foo.sh 
#! /bin/bash
#clear
while :
do
echo
echo "  _________________________________________________"
echo " !         1 - Lancer l'installation              !"
echo " !         2 - Lire les licences et crédits       !"
echo " !         3 - Quitter l'assistant                !"
echo " !________________________________________________!"
echo
read -p "> " choice
case $choice in
 1)
  echo "Choix install choisi."
  break
  ;;
 2)
  echo "Choix licence inmenu choisi."
  break
  ;;
 3)
  echo "Bye bye... quit choisi."
  break
  ;;
 *)
  echo "Mauvais choix... reload choisi."
  continue
  ;;
esac
done

Ça donne ça :

0