![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Shell Vos questions sur l'utilisation des commandes shell |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité de passage
![]() Date d'inscription: août 2008
Messages: 9
|
Bonjour,
Je suis nouveau dans le domaine de la programmation SHELL(...) et je dois lancer un shell avec param date comme suivant YYYYMMDD ./upgr.sh 20080825 lors du lancement j'ai l'erreur suivante: value too great for base (error token is "08") Merci de m'aidé a résoudre se problème ou me donné un exemple d'un programme avec la date Merci d'avance. |
|
|
|
|
|
#7 (permalink) |
|
Membre émérite
![]() Date d'inscription: septembre 2002
Localisation: Bruxelles
Âge: 30
Messages: 955
|
Salut,
Le shell ne reconnait la base sur laquelle tu travailles lorsque tu lui fournis un chiffre tel que 09. Il faut donc lui spécifier la base: Code :
echo $((10#09+7)) 16 |
|
|
|
|
|
#8 (permalink) |
|
Invité de passage
![]() Date d'inscription: août 2008
Messages: 9
|
Merci deja pour la precision et la rapidité
mon autre probleme: le déroulement du script: ./database -i(i ici pour le menu dump) 1) Ajouter une base 3) Désactiver une base 2) Lister les bases 4) Quitter Quelle action souhaitez-vous entreprendre ? 1 ----1=ma reponse:d et la j'ai une question pour la date Le format de saisie de la date est : AAAAMMJJ A quelle date souhaitez-vous le ajouter la base? 20080825 ./reinittab: 08: value too great for base (error token is "08") la je peux pas faire ((((10#20080825)))) merci vraiment et d'avance. |
|
|
|
|
|
#10 (permalink) |
|
Invité de passage
![]() Date d'inscription: août 2008
Messages: 9
|
Code :
rep="" while test -z "$rep" do echo "" echo "Le format de saisie de la date est : AAAAMMJJ" read -n 8 -p "A quelle date souhaitez-vous la ....? " -t 60 rep echo "" db_verif_date_db "$rep" if test $? -ne 0 ; then echo "Merci de respecter le format de saisie." rep="" fi echo "" done Dernière modification par gangsoleil ; 22/08/2008 à 17h27 |
|
|
|
|
|
#12 (permalink) |
|
Invité de passage
![]() Date d'inscription: août 2008
Messages: 9
|
Code :
db_verif_date_db () {
if test $db_debug -eq 1 ; then
set -x
echo "db_verif_date_db" 1>&2
fi
local -i ret=0
reinit_day="$1"
if test -z "$reinit_day" ; then
echo "Attention : Le champ < date de début > de creation n'est pas renseigné." 1>&2
ret=-1
return $ret
fi
if test -z "$(echo "$reinit_day" |grep "^[0-9]\{8\}$")" ; then
echo "La date de réinit $reinit_day est mal formatée." 1>&2
echo "Elle doit comporter 8 chiffres." 1>&2
ret=-1
return $ret
fi
reinit_annee="$(echo "$reinit_day"|sed -e "s/^\([0-9]\{4\}\)[0-9]\{2\}.*/\1/")"
annee="$(date +%Y)"
let "annee1=$annee+1"
if test -z "$(echo "$reinit_day" |grep -E "^$annee|^$annee1")" ; then
echo "L'année de la date de réinit $reinit_day est mal formatée." 1>&2
echo "date = $reinit_day" 1>&2
ret=-1
return $ret
fi
reinit_mois="$(echo "$reinit_day"|sed -e "s/^[0-9]\{4\}\([0-9]\{2\}\).*/\1/")"
if test $reinit_mois -lt 1 -o $reinit_mois -gt 12 ; then
echo "Le mois dans $reinit_day est erroné." 1>&2
ret=-1
return $ret
fi
reinit_jour="$(echo "$reinit_day"|sed -e "s/^[0-9]\{4\}[0-9]\{2\}\([0-9]\{2\}\)$/\1/")"
nb_jour_du_mois=${mois_de_annee[$reinit_mois]}
if test $reinit_jour -lt 1 -o $reinit_jour -gt $nb_jour_du_mois ; then
echo "Le jour dans $reinit_day est erroné." 1>&2
ret=-1
return $ret
fi
return $ret
}
Dernière modification par gangsoleil ; 22/08/2008 à 17h28 |
|
|
|
|
|
#15 (permalink) |
|
Membre Confirmé
![]() Date d'inscription: septembre 2007
Localisation: Genève
Âge: 45
Messages: 219
|
Bonjour,
J'ai l'impression que si le code echo $((09+7)) sort une erreur, c'est que les 0 en début de nombre ne sont pas acceptés. Donc, dans la date que tu fournis, l'année ne pose pas de problème (il y aura toujours le 2 devant), par contre le mois et le jour ne vont pas marcher pour les neuf premiers jours de chaque mois et pour les neufs premiers mois de chaque année. Dans la fonction que tu as bien voulu exposer, plutôt que de modifier le code, j'ajouterais une ligne après l'initialisation de reinit_mois et une autre après celle de reinit_jour. Cela permettra de bien comprendre ce que je veux faire: Code :
reinit_mois=... reinit_mois=$(echo $reinit_mois | sed -e 's/^0//') [...] reinit_jour=... reinit_jour=$(echo $reinit_jour | sed -e 's/^0//') |
|
|
|
![]() |
![]() |
||
error token is "08"
|
||
| Outils de la discussion | |
|
|