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 !


A voir également:

6 réponses

jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
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
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Indirection ;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
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