Topic de DesertStrength :

[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[@]}"
}
C'est quoi cette syntaxe if test truc = regex ?

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 :ok:

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 :ok:

Merci beaucoup :ok:

Variable globale :

ARGUMENTS=$(echo "${@}")

Code :

https://image.noelshack.com/fichiers/2021/04/3/1611754192-nikemouk.png

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 avoir
Hell0 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...]

https://image.noelshack.com/fichiers/2021/04/3/1611754667-capture-d-ecran-du-2021-01-27-14-37-40.png

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

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

Ou alors j'ai pas compris ta requête ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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

Ou alors j'ai pas compris ta requête ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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

Ou alors j'ai pas compris ta requête ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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 ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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

Ou alors j'ai pas compris ta requête ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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 ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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é :ok:

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

Ou alors j'ai pas compris ta requête ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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 ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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é :ok:

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
 

https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmansalut.jpg

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

Ou alors j'ai pas compris ta requête ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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 ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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é :ok:

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
 

https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmansalut.jpg

https://image.noelshack.com/fichiers/2021/04/3/1611760685-capture-d-ecran-du-2021-01-27-16-17-56.png

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

Ou alors j'ai pas compris ta requête ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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 ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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é :ok:

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
 

https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmansalut.jpg

https://image.noelshack.com/fichiers/2021/04/3/1611760685-capture-d-ecran-du-2021-01-27-16-17-56.png

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/

:d) https://image.noelshack.com/fichiers/2021/04/3/1611760945-posix-shit.png

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

Ou alors j'ai pas compris ta requête ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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 ? https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmandecu.jpg

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é :ok:

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
 

https://image.noelshack.com/fichiers/2017/28/7/1500209209-stallmansalut.jpg

https://image.noelshack.com/fichiers/2021/04/3/1611760685-capture-d-ecran-du-2021-01-27-16-17-56.png

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/

:d) https://image.noelshack.com/fichiers/2021/04/3/1611760945-posix-shit.png

https://image.noelshack.com/fichiers/2021/04/3/1611761169-capture-d-ecran-du-2021-01-27-16-26-01.png

https://image.noelshack.com/fichiers/2021/04/3/1611761188-capture-d-ecran-du-2021-01-27-16-26-21.png En mettant ton for dans validityWords j'obtiens rien :(

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
En ligne sur JvArchive 92