Besoin d'aide script bash

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. 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 !
    1. 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.
      1. Contributeur
        Vraiment a part donner l'array directement en argument je vois pas
        Moi non plus ;-(

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

        check_array ${start[@]}
    2. 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 ? :)
      1. Contributeur
        Indirection ;-))
    3. 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 !
      1. Contributeur
        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

        1. Modérateur
          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