[AIDE][BASH] Pourquoi ma boucle FOR fonctionne pas ?
SuppriméLe 27 janvier 2021 à 15:36:57 r10r1010101r0 a écrit :
Bon allez nique ta m_re
Sympa
Le script de l'auteur :
######################################################################
# Vérifie si le mot est valide.
#
# Globals:
# ARGUMENTS
# Locals:
# checkNumbersArguments
# searchErrorNumber
# Arguments:
# None
# Return:
# 0 si le mot est bel et bien un mot et si ils ne contient pas
# des nombres, 1 si erreur.
######################################################################
function validityWords() {
local checkNumbersArguments=$(echo "${ARGUMENTS}" | grep '[0-9]')
if ! test "${checkNumbersArguments}"
then
return 0
else
errorNumber
return 1
fi
}
function errorNumber() {
local array=()
for arg in ${ARGUMENTS}
do
if test "${arg}" = *[0-9]*
then
array+=("${arg}")
fi
done
echo "${array[@]}"
}
Le 27 janvier 2021 à 15:41:16 mynameisflash a écrit :
C'est quoi cette syntaxe if test truc = regex ?
Bah j'utilise la command test pour voir si l'argument a un nombre ou pas
Le 27 janvier 2021 à 15:40:46 DesertStrength a écrit :
Le 27 janvier 2021 à 15:39:44 tokpela a écrit :
Le script de l'auteur :###################################################################### # Vérifie si le mot est valide. # # Globals: # ARGUMENTS # Locals: # checkNumbersArguments # searchErrorNumber # Arguments: # None # Return: # 0 si le mot est bel et bien un mot et si ils ne contient pas # des nombres, 1 si erreur. ###################################################################### function validityWords() { local checkNumbersArguments=$(echo "${ARGUMENTS}" | grep '[0-9]') if ! test "${checkNumbersArguments}" then return 0 else errorNumber return 1 fi } function errorNumber() { local array=() for arg in ${ARGUMENTS} do if test "${arg}" = *[0-9]* then array+=("${arg}") fi done echo "${array[@]}" }
Merci faut pas oublier la variable globale ARGUMENTS=$(echo "${@}")
Edité !
Et pas de problème
Le 27 janvier 2021 à 15:42:53 tokpela a écrit :
Le 27 janvier 2021 à 15:40:46 DesertStrength a écrit :
Le 27 janvier 2021 à 15:39:44 tokpela a écrit :
Le script de l'auteur :###################################################################### # Vérifie si le mot est valide. # # Globals: # ARGUMENTS # Locals: # checkNumbersArguments # searchErrorNumber # Arguments: # None # Return: # 0 si le mot est bel et bien un mot et si ils ne contient pas # des nombres, 1 si erreur. ###################################################################### function validityWords() { local checkNumbersArguments=$(echo "${ARGUMENTS}" | grep '[0-9]') if ! test "${checkNumbersArguments}" then return 0 else errorNumber return 1 fi } function errorNumber() { local array=() for arg in ${ARGUMENTS} do if test "${arg}" = *[0-9]* then array+=("${arg}") fi done echo "${array[@]}" }
Merci faut pas oublier la variable globale ARGUMENTS=$(echo "${@}")
Edité !
Et pas de problème
Merci beaucoup
Variable globale :
ARGUMENTS=$(echo "${@}")
Code :
Le but est que dès que je détecte un nombre dans l'un des arguments du script, je l'afficche dans le tableau
Donc on devrait avoirHell0 W0rld1
avec
Par exemple
./test.sh test Hell0 W0rld1
Je stocke les mots dans un tableau qui comportent au moins un nombre et les affiche
Or ma boucle FOR à un problème, elle ne loope pas correctement et me ressort le tableau des arguments : [ICI J'ai rajouté un echo $arg pour voir si ça loop bien mais non...]
Résultat :
test Hell0 W0rld1
Comment faire les kheys svp ?
Merci
######################################################################
# Variables globales
######################################################################
ARGUMENTS=$(echo "${@}")
######################################################################
# Vérifie si le mot est valide.
#
# Globals:
# ARGUMENTS
# Locals:
# checkNumbersArguments
# searchErrorNumber
# Arguments:
# None
# Return:
# 0 si le mot est bel et bien un mot et si ils ne contient pas
# des nombres, 1 si erreur.
######################################################################
function validityWords() {
local checkNumbersArguments=$(echo "${ARGUMENTS}" | grep '[0-9]')
if ! test "${checkNumbersArguments}"
then
return 0
else
errorNumber
return 1
fi
}
function errorNumber() {
local array=()
for arg in ${ARGUMENTS}
do
if test "${arg}" = *[0-9]*
then
array+=("${arg}")
fi
done
echo "${array[@]}"
}
Merci à tokpela
Le 27 janvier 2021 à 16:01:33 [Rembrandt_349] a écrit :
Pourquoi tu t'embêtes autant kheyou ?
C'est pas complliqué pourtant :#!/bin/sh for arg in "$@"; do echo "$arg" | grep -E '[0-9]' done
Sous forme de script unique ça semble fonctionner
Mais avec des fonctions ça marche pas
Là j'ai rien sur la sortie standard
Le 27 janvier 2021 à 16:04:30 DesertStrength a écrit :
Le 27 janvier 2021 à 16:01:33 [Rembrandt_349] a écrit :
Pourquoi tu t'embêtes autant kheyou ?
C'est pas complliqué pourtant :#!/bin/sh for arg in "$@"; do echo "$arg" | grep -E '[0-9]' done
Sous forme de script unique ça semble fonctionner
Mais avec des fonctions ça marche pas
Là j'ai rien sur la sortie standard
Explique moi clairement ton problème, tu as en entrée (STDIN) des mots, tu veux en sortie (STDOUT) uniquement les mots qui contiennent des nombres, c'est bien ça ?
Pourquoi tu veux utiliser des fonctions, et en quoi ça ne fonctionnerai pas ?
Le 27 janvier 2021 à 16:07:09 [Rembrandt_349] a écrit :
Le 27 janvier 2021 à 16:04:30 DesertStrength a écrit :
Le 27 janvier 2021 à 16:01:33 [Rembrandt_349] a écrit :
Pourquoi tu t'embêtes autant kheyou ?
C'est pas complliqué pourtant :#!/bin/sh for arg in "$@"; do echo "$arg" | grep -E '[0-9]' done
Sous forme de script unique ça semble fonctionner
Mais avec des fonctions ça marche pas
Là j'ai rien sur la sortie standard
Explique moi clairement ton problème, tu as en entrée (STDIN) des mots, tu veux en sortie (STDOUT) uniquement les mots qui contiennent des nombres, c'est bien ça ?
Pourquoi tu veux utiliser des fonctions, et en quoi ça ne fonctionnerai pas ?
Oui c'est bien ça
Je veux utiliser des fonctions car la vérification est une option de mon code général en fait et donc je me dois de structurer mon code pour une mielleure visibilité
Bah avec ton $@ il récupère les mots j'ai l'impression
En utilisant ma variable GLOBALE ${ARGUMENTS} il récupères tous les arguments mais m'affiche tous les argumentss et pas uniquement ceux avec les nombres
Le 27 janvier 2021 à 16:09:32 DesertStrength a écrit :
Le 27 janvier 2021 à 16:07:09 [Rembrandt_349] a écrit :
Le 27 janvier 2021 à 16:04:30 DesertStrength a écrit :
Le 27 janvier 2021 à 16:01:33 [Rembrandt_349] a écrit :
Pourquoi tu t'embêtes autant kheyou ?
C'est pas complliqué pourtant :#!/bin/sh for arg in "$@"; do echo "$arg" | grep '[0-9]' done
Sous forme de script unique ça semble fonctionner
Mais avec des fonctions ça marche pas
Là j'ai rien sur la sortie standard
Explique moi clairement ton problème, tu as en entrée (STDIN) des mots, tu veux en sortie (STDOUT) uniquement les mots qui contiennent des nombres, c'est bien ça ?
Pourquoi tu veux utiliser des fonctions, et en quoi ça ne fonctionnerai pas ?
Oui c'est bien ça
Je veux utiliser des fonctions car la vérification est une option de mon code général en fait et donc je me dois de structurer mon code pour une mielleure visibilité
Bah avec ton $@ il récupère les mots j'ai l'impression
En utilisant ma variable GLOBALE ${ARGUMENTS} il récupères tous les arguments mais m'affiche tous les argumentss et pas uniquement ceux avec les nombres
J'ai du mal à te comprendre mon kheyou mais je crois que ceci devrait te satisfaire :
#!/bin/sh
# Fonction pour te faire plaisir
numberInWord() {
# Si le mot contient un nombre
echo "$1" | grep '[0-9]' ||
# Si le mot n'en contient pas
echo "Error"
return 1
}
for arg in "$@"; do
numberInWord "$arg"
done
Le 27 janvier 2021 à 16:14:58 [Rembrandt_349] a écrit :
Le 27 janvier 2021 à 16:09:32 DesertStrength a écrit :
Le 27 janvier 2021 à 16:07:09 [Rembrandt_349] a écrit :
Le 27 janvier 2021 à 16:04:30 DesertStrength a écrit :
Le 27 janvier 2021 à 16:01:33 [Rembrandt_349] a écrit :
Pourquoi tu t'embêtes autant kheyou ?
C'est pas complliqué pourtant :#!/bin/sh for arg in "$@"; do echo "$arg" | grep '[0-9]' done
Sous forme de script unique ça semble fonctionner
Mais avec des fonctions ça marche pas
Là j'ai rien sur la sortie standard
Explique moi clairement ton problème, tu as en entrée (STDIN) des mots, tu veux en sortie (STDOUT) uniquement les mots qui contiennent des nombres, c'est bien ça ?
Pourquoi tu veux utiliser des fonctions, et en quoi ça ne fonctionnerai pas ?
Oui c'est bien ça
Je veux utiliser des fonctions car la vérification est une option de mon code général en fait et donc je me dois de structurer mon code pour une mielleure visibilité
Bah avec ton $@ il récupère les mots j'ai l'impression
En utilisant ma variable GLOBALE ${ARGUMENTS} il récupères tous les arguments mais m'affiche tous les argumentss et pas uniquement ceux avec les nombresJ'ai du mal à te comprendre mon kheyou mais je crois que ceci devrait te satisfaire :
#!/bin/sh # Fonction pour te faire plaisir numberInWord() { # Si le mot contient un nombre echo "$1" | grep '[0-9]' || # Si le mot n'en contient pas echo "Error" return 1 } for arg in "$@"; do numberInWord "$arg" done
J'ai fait ça
Et il prend en considèration que le premier mot et pas les autres malheureusement
Le 27 janvier 2021 à 16:18:27 DesertStrength a écrit :
Le 27 janvier 2021 à 16:14:58 [Rembrandt_349] a écrit :
Le 27 janvier 2021 à 16:09:32 DesertStrength a écrit :
Le 27 janvier 2021 à 16:07:09 [Rembrandt_349] a écrit :
Le 27 janvier 2021 à 16:04:30 DesertStrength a écrit :
Le 27 janvier 2021 à 16:01:33 [Rembrandt_349] a écrit :
Pourquoi tu t'embêtes autant kheyou ?
C'est pas complliqué pourtant :#!/bin/sh for arg in "$@"; do echo "$arg" | grep '[0-9]' done
Sous forme de script unique ça semble fonctionner
Mais avec des fonctions ça marche pas
Là j'ai rien sur la sortie standard
Explique moi clairement ton problème, tu as en entrée (STDIN) des mots, tu veux en sortie (STDOUT) uniquement les mots qui contiennent des nombres, c'est bien ça ?
Pourquoi tu veux utiliser des fonctions, et en quoi ça ne fonctionnerai pas ?
Oui c'est bien ça
Je veux utiliser des fonctions car la vérification est une option de mon code général en fait et donc je me dois de structurer mon code pour une mielleure visibilité
Bah avec ton $@ il récupère les mots j'ai l'impression
En utilisant ma variable GLOBALE ${ARGUMENTS} il récupères tous les arguments mais m'affiche tous les argumentss et pas uniquement ceux avec les nombresJ'ai du mal à te comprendre mon kheyou mais je crois que ceci devrait te satisfaire :
#!/bin/sh # Fonction pour te faire plaisir numberInWord() { # Si le mot contient un nombre echo "$1" | grep '[0-9]' || # Si le mot n'en contient pas echo "Error" return 1 } for arg in "$@"; do numberInWord "$arg" done
J'ai fait ça
Et il prend en considèration que le premier mot et pas les autres malheureusement
Mais à quel moment tu appelles ta fonction "validityWords" ? Je ne le vois pas sur ta capture
Les instructions que je t'ai données fonctionnent, tu peux tester ici : https://www.jdoodle.com/test-bash-shell-script-online/
Le 27 janvier 2021 à 16:24:35 [Rembrandt_349] a écrit :
Le 27 janvier 2021 à 16:18:27 DesertStrength a écrit :
Le 27 janvier 2021 à 16:14:58 [Rembrandt_349] a écrit :
Le 27 janvier 2021 à 16:09:32 DesertStrength a écrit :
Le 27 janvier 2021 à 16:07:09 [Rembrandt_349] a écrit :
Le 27 janvier 2021 à 16:04:30 DesertStrength a écrit :
Le 27 janvier 2021 à 16:01:33 [Rembrandt_349] a écrit :
Pourquoi tu t'embêtes autant kheyou ?
C'est pas complliqué pourtant :#!/bin/sh for arg in "$@"; do echo "$arg" | grep '[0-9]' done
Sous forme de script unique ça semble fonctionner
Mais avec des fonctions ça marche pas
Là j'ai rien sur la sortie standard
Explique moi clairement ton problème, tu as en entrée (STDIN) des mots, tu veux en sortie (STDOUT) uniquement les mots qui contiennent des nombres, c'est bien ça ?
Pourquoi tu veux utiliser des fonctions, et en quoi ça ne fonctionnerai pas ?
Oui c'est bien ça
Je veux utiliser des fonctions car la vérification est une option de mon code général en fait et donc je me dois de structurer mon code pour une mielleure visibilité
Bah avec ton $@ il récupère les mots j'ai l'impression
En utilisant ma variable GLOBALE ${ARGUMENTS} il récupères tous les arguments mais m'affiche tous les argumentss et pas uniquement ceux avec les nombresJ'ai du mal à te comprendre mon kheyou mais je crois que ceci devrait te satisfaire :
#!/bin/sh # Fonction pour te faire plaisir numberInWord() { # Si le mot contient un nombre echo "$1" | grep '[0-9]' || # Si le mot n'en contient pas echo "Error" return 1 } for arg in "$@"; do numberInWord "$arg" done
J'ai fait ça
Et il prend en considèration que le premier mot et pas les autres malheureusementMais à quel moment tu appelles ta fonction "validityWords" ? Je ne le vois pas sur ta capture
Les instructions que je t'ai données fonctionnent, tu peux tester ici : https://www.jdoodle.com/test-bash-shell-script-online/
Données du topic
- Auteur
- DesertStrength
- Date de création
- 27 janvier 2021 à 14:39:07
- Date de suppression
- 27 janvier 2021 à 16:58:52
- Supprimé par
- Auteur
- Nb. messages archivés
- 56
- Nb. messages JVC
- 55