Besoin d'aide script bash
Confusionman
-
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 !
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
-
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
-
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
-
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 ! -
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 ? :) -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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. -
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 !