#!/bin/bash
#  isalpha.sh: Utiliser une structure "case" pour filtrer une chaîne de
#+ caractères.

SUCCES=0
ECHEC=-1

est_alpha ()  # Teste si le *premier caractère* de la chaîne est alphabétique.
{
if [ -z "$1" ]                # Pas d'argument passé?
then
  return $ECHEC
fi

case "$1" in
  [a-zA-Z]*) return $SUCCES;;  # Commence avec une lettre?
  *        ) return $ECHEC;;
esac
}             # Comparer ceci avec la fonction "isalpha ()" en C.


est_alpha2 ()   # Teste si la *chaîne entière* est alphabétique.
{
  [ $# -eq 1 ] || return $ECHEC

  case $1 in
  *[!a-zA-Z]*|"") return $ECHEC;;
               *) return $SUCCES;;
  esac
}

est_numerique ()    # Teste si la *chaîne entière* est numérique.
{                   # En d'autres mots, teste si la variable est de type entier.
  [ $# -eq 1 ] || return $ECHEC

  case $1 in
  *[!0-9]*|"") return $ECHEC;;
            *) return $SUCCES;;
  esac
}



verif_var ()  # Interface à est_alpha ().
{
if est_alpha "$@"
then
  echo "\"$*\" commence avec un caractère alpha."
  if est_alpha2 "$@"
  then        # Aucune raison de tester si le premier caractère est non alpha.
    echo "\"$*\" contient seulement des caractères alpha."
  else
    echo "\"$*\" contient au moins un caractère non alpha."
  fi  
else
  echo "\"$*\" commence avec un caractère non alpha."
              # Aussi "non alpha" si aucun argument n'est passé.
fi

echo

}

verif_numerique ()  # Interface à est_numerique ().
{
if est_numerique "$@"
then
  echo "\"$*\" contient seulement des chiffres [0 - 9]."
else
  echo "\"$*\" a au moins un caractère qui n'est pas un chiffre."
fi

echo

}

a=23skidoo
b=H3llo
c=-What?
d=What?
e=`echo $b`   # Substitution de commandes.
f=AbcDef
g=27234
h=27a34
i=27.34

verif_var $a
verif_var $b
verif_var $c
verif_var $d
verif_var $e
verif_var $f
verif_var     # Pas d'argument passé, donc qu'arrive-t'il?
#
verif_numerique $g
verif_numerique $h
verif_numerique $i


exit 0        # Script amélioré par S.C.

# Exercice:
# --------
#  Ecrire une fonction 'est_flottant ()' qui teste les nombres en virgules
#+ flottantes.
#  Astuce: La fonction duplique 'est_numerique ()',
#+ mais ajoute un test pour le point décimal nécessaire.
