Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/12/2020, à 19:12

lebossejames

[Résolu] bash génération dynamique de condition

Bonjour,

Je souhaiterais effectuer un listing de tous les répertoires présent dans le dossier release puis afficher un menu demandant le choix par un entier correspondant à la position dans cette liste ici products, mais je confronté au problème lié à la génération dynamique du if après le read qui permettra de diriger mes tâches, est-il possible de le faire? Comme on dit, ensemble tout devient possible mais je n'arrive pas à savoir comment procéder de la sorte:

choiceproduct () {
    products=($(ls release))
    var=1;
    for prod in ${products[@]}
    do
    echo "Press $var product $prod"
    var=$((var+1))
    
    done
     echo "Press x to exit the script"
     read -p "Input Selection:" choiceproductinput

  
        if [ "$choiceproductinput" = "1" ]; then
            productSelected=${products[0]};
        elif [ "$choiceproductinput" = "2" ]; then
            productSelected=${products[1]};
        elif [ "$choiceproductinput" = "x" ];then
            exit
        elif [ "$choiceproductinput" = "X" ];then
            exit
        else
            echo "You have entered an invalid selection!"
            echo "Please try again!"
            echo ""
            echo "Press any key to continue..."
            read -n 1
            clear
            choiceproduct
        fi
}

Merci d'avance.

Dernière modification par lebossejames (Le 24/12/2020, à 17:15)

Hors ligne

#2 Le 23/12/2020, à 19:36

Watael

Re : [Résolu] bash génération dynamique de condition

non, non, non...

d'abord, pas ls : c'est sale.

cd release
products=( */ )
cd

enfin, une sélection peut se faire avec select !

Dernière modification par Watael (Le 23/12/2020, à 19:37)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#3 Le 24/12/2020, à 08:01

serged

Re : [Résolu] bash génération dynamique de condition

Et avec du, c'est pas plus simple ?

cd ~/release
du -a
cd -

LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#4 Le 24/12/2020, à 08:37

Watael

Re : [Résolu] bash génération dynamique de condition

ça ne répond pas à la problématique : afficher un menu demandant le choix par un entier...


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#5 Le 24/12/2020, à 09:22

FrancisFDZ

Re : [Résolu] bash génération dynamique de condition

Ne serait-ce  pas mieux avec un "case" ?


-- On peut avoir des raisons de se plaindre et n'avoir pas raison de se plaindre --
[Victor Hugo]

Hors ligne

#6 Le 24/12/2020, à 09:25

Watael

Re : [Résolu] bash génération dynamique de condition

pas nécessairement après, puisqu'il semble que l'action sera la même - il n'est question que de choisir le fichier à traiter.
et, pas pour générer le menu.


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#7 Le 24/12/2020, à 13:37

nany

Re : [Résolu] bash génération dynamique de condition

Bonjour,


choiceproduct () {
  cd release || return
  products=( */ )
  cd || return

########## MENU ##########
  var=0

  for prod in "${products[@]}"
  do
    var=$((var+1))
    echo "Press $var product $prod"
  done

  echo "Press x to exit the script"
  echo
########## MENU ##########

  read -rp "Input Selection: " choiceproductinput

  # si $choiceproductinput est un entier compris entre 1 et $var
  if [[ "$choiceproductinput" =~ ^[0-9]+$ && "$choiceproductinput" -ge 1 && "$choiceproductinput" -le "$var" ]]; then
    productSelected="${products["$choiceproductinput"-1]}"
  elif [ "${choiceproductinput,,}" = "x" ]; then
    exit
  else
    echo "You have entered an invalid selection!"
    echo "Please try again!"
    echo ""
    echo "Press any key to continue..."
    read -rn 1
    clear
    choiceproduct
  fi
}

Dernière modification par nany (Le 24/12/2020, à 13:37)

En ligne

#8 Le 24/12/2020, à 15:45

Watael

Re : [Résolu] bash génération dynamique de condition

ou alors, vous utilisez select ! roll
smile

cd release/ # bien sûr, on a testé que le répertoire existe, et est accessible
products=( * )
cd # je ne vois pas ce qui le ferais échoué

select fichier in "${products[@]}"
do
    echo "action avec \"$f\""
    break
done

done !

PS :

for i in ${!products[*]}
do
   echo "$((i+1)) - ${products[i]}"
done
read -p 'choix : ' choix
(( 0 < $choix && $choix <= ${#products[*]} )) \
    && echo "action avec \"${products[choix-1]}\"" \
    || { >&2 echo "err n° choix"; exit 1;}

Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#9 Le 24/12/2020, à 17:14

lebossejames

Re : [Résolu] bash génération dynamique de condition

Merci ça marche.

Hors ligne

#10 Le 25/12/2020, à 08:48

serged

Re : [Résolu] bash génération dynamique de condition

Watael a écrit :

ça ne répond pas à la problématique : afficher un menu demandant le choix par un entier...

Avec un case, c'est faisable et simple...

Exemple de question "oui-non" dans mes scripts :

echo -en "La suite ? (o/N)"
read rep
case $rep in
 o|O|y|Y)  echo "La suite..."
esac

LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#11 Le 25/12/2020, à 09:18

Watael

Re : [Résolu] bash génération dynamique de condition

là, tu n'affiches pas un menu, tu vérifies le choix fait dans le menu.

l'OP te demande la carte, et tu lui apportes l'addition. ± lol


Connected \o/
Welcome to sHell. · eval is evil.

En ligne