Zsh, verification de chaine

Bonjour,

voici ma méthode qui déconne (dans le même programme que mon précédent sujet)

#bad symbols to sites names
badSymbols=("\s" "\." "[A-Z]")

#
# Test if the website name contains a given symbol
# @variable: site_name
# @return: res (2 if the file doesn't exist)
# >> Tested 04/25/14
#
websiteName_test() {
res=0
for i in 'seq 0 $((${#badSymbols[*]}-1))'
do
var1=$(echo $1 | grep "${badSymbols[i]}")
if [ ! -z ${var1} ]; then
res=2
break
fi
done
return $res
}

----- > le problème est que les majuscules et les points sont repérés mais pas les espaces.
Quelqu'un aurait une piste?

Merci.

13 réponses

  1. hello
    mettre des " autour des variables
    if [ ! -z "${var1}" ]; then
    0
    1. ça ne donne rien de plus

      -----------

      ----> voici le contenu de mon fichier essai.sh
      #bin/zsh
      source ./Script.sh
      websiteName_test $1
      echo $res

      ----> et le résultat d'exécution en console:

      MacBook-Pro-de-alexandre:Desktop alexandre$ ./essai.sh "site.1"
      2
      MacBook-Pro-de-alexandre:Desktop alexandre$ ./essai.sh "sIte1"
      2
      MacBook-Pro-de-alexandre:Desktop alexandre$ ./essai.sh "site 1"
      0
      MacBook-Pro-de-alexandre:Desktop alexandre$
      0
      1. essayer avec
        badSymbols=("[:space:]" "\." "[A-Z]")
        0
        1. Bien vu. merci.

          Aurais tu une astuce pour trouver les espaces en début et fin de ligne? les regexp ne fonctionnent pas ( *[]^ et ^[]* )
          0
          1. $ echo "aa  bb " | grep "[[:space:]]$"
            aa bb
            $ echo "aa bb" | grep "[[:space:]]$"
            $ echo " aa bb" | grep "[[:space:]]$"
            $ echo " aa bb" | grep "^[[:space:]]"
            aa bb
            0
            1. non seulement ça ne marche pas,
              mais [:space:] me donne 2 tout le temps.
              oO :'-(

              Merci de m'aider en tout cas.
              T'aura ton pseudo au "générique" :)
              0
              1. Contributeur
                Salut,

                Essaye avec
                egrep
                ou
                grep -E
                :

                $ echo -e " blabla\nblibli\nblublu \n   bloblo\nbleble   " | egrep '^ | $'| cat -A
                blabla$
                blublu $
                bloblo$
                bleble $

                0
                1. fichier script.sh -----------------

                  #bad symbols to sites names
                  badSymbols=("[:space:]" "\." "[A-Z]")

                  #
                  # Test if the website name contains a given symbol
                  # @variable: site_name
                  # @return: res (2 if the file doesn't exist)
                  # >> Tested 04/25/14
                  #
                  websiteName_test() {
                  res=0
                  for i in 'seq 0 $((${#badSymbols[*]}-1))'
                  do
                  var1=$(echo $1 | grep -E "${badSymbols[i]}")
                  if [ ! -z "${var1}" ]; then
                  res=2
                  break
                  fi
                  done
                  return $res
                  }

                  fichier essai.sh ---------------

                  #bin/zsh
                  source ./Script.sh
                  websiteName_test $1
                  echo $res

                  ---------------------
                  lien:
                  https://www.wuala.com/AdeLaTullaye/Code/?key=goa9X24okDkG

                  avec [:essai:] il est toujours à 2 et avec \s, il est toujours à 0
                  0
                  1. Contributeur
                    Re-
                    J'ai l'impression que tu te compliques la vie ;-\

                    Le script
                    cat brol.zsh
                    :
                    #! /bin/zsh

                    #
                    # Test if the website name contains a given symbol
                    # @variable: site_name
                    # @return: res (2 if the file doesn't exist)
                    # >> Tested 04/25/14
                    #
                    websiteName_test() {
                    egrep -q '\s|\.|[A-Z]' <<<"$1"
                    if [ $? -eq 0 ]
                    then
                    return 2
                    else
                    return 0
                    fi
                    }

                    websiteName_test "$1"
                    echo $?

                    Les test :
                    $ ./foo.zsh "site1"
                    0

                    $ ./foo.zsh "site.1"
                    2

                    $ ./foo.zsh "sitE1"
                    2

                    $ ./foo.zsh "si te1"
                    2
                    0
                    1. Parce que je voulais en faire un tableau pour faciliter la motif des symboles par des novices (ou quasi novices).
                      Mais j'en ai mais claque. je vais arrêter de me prendre la tête avec ça.
                      0
                      1. Y es. j'ai comprise ce qui déconnait:
                        c'est les guillemets sur la variable à l'entrée du test.

                        Merci.

                        Par contre les regexp pour les espace(s) en début et fin de lignes déconnent toujours
                        0