Besoin d'aide script bash

Confusionman -  
 Confusionman -
Bonjour, j'ai un problème avec mon script :/

je déclare un array comme ceci :

declare -a start=('str1' 'vbr1' 'tri')

Et un peu plus loin il y a un read -r input, je voudrais savoir comment faire pour vérifier que ce qui a été saisi par l'utilisateur dans $input est contenu dans l'array start.
Cette condition marche bien : if [[ " ${start[@]} " =~ " ${input} " ]]; then
mais seulement si ce que l'utilisateur entre est identique à un des termes de l'array, or j'aimerais pouvoir ecrire "str1 rep" ou encore "tri mr" et qu'il considère quand même qu'une partie de $input se trouve dans l'array start...

je sais pas si j'ai été clair, excusez moi si jamais :)
Merci d'avance !

6 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Tu peux extraire le premier mot en t'inspira de ceci:
    johand@bata:~$ aString="abc def ghi"
    johand@bata:~$ echo ${aString%% *}
    abc

    L'avantage de cette méthode est d'utiliser les commandes internes de bash et de ne lancer aucun processus externe
    0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    $ cat foo.sh 
    #! /bin/bash

    declare -a start=('str1' 'vbr1' 'tri')

    PREG="${start[@]}"
    REG="${PREG// /|}"

    while :
    do
    read -rp "Entrez un nom : " input

    if [[ ${input} =~ ${REG} ]]
    then
    echo "Entrée existante"
    else
    echo "L'entrée n'existe pas"
    fi
    done


    $ ./foo.sh
    Entrez un nom : str1
    Entrée existante
    Entrez un nom : str1 abc
    Entrée existante
    Entrez un nom : abc
    L'entrée n'existe pas
    Entrez un nom : abc vbr1
    Entrée existante
    Entrez un nom : triton
    Entrée existante

    0
  3. Confusionman
     
    Merci je vais essayer ça de suite !
    Jisiv merci, le problème c'est que parfois l'entrée peut venir en second mot ou même en troisième, l'ordre est aléatoire :/
    Je reviens pour dire si ça marche !
    0
  4. Confusionman
     
    Super ça marche impec !
    Merci zipe

    Je vais devoir faire ça sur beacoup d'array, j'essaye d'en faire une fonction mais ça ne marche pas.

    function check_array() {
    pv_$1="${"$1"[@]}"
    v_$1="${pv_$1// /|}"
    }

    check_array start

    ${"$1"[@]} : mauvaise substitution.

    Tu saurais pas comment faire ? :)
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Indirection ;-))
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Confusionman
     
    Arf ça marche pas (en même temps je découvre a peine :D)

    function check_array() {
    pv_$1="${!'"$1"'[@]}"
    v_$1="${pv_$1// /|}"
    }

    ${!'"$1"'[@]} : mauvaise substitution

    Vraiment a part donner l'array directement en argument je vois pas, et je sais pas comment faire.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Vraiment a part donner l'array directement en argument je vois pas
      Moi non plus ;-(

      function check_array() {
      PREG="${@}"
      REG="${PREG// /|}"
      }

      check_array ${start[@]}
      0
  7. Confusionman
     
    Merci c'est parfait (enfin ya des problèmes mais ça viens de mon code cette fois :))
    Me reste plus qu'à lire la doc pour comprendre comme fonctionne ce code !

    merci beaucoup !
    0