#1 Le 24/05/2015, à 16:54
- cerulean
[résolu] Question à 2 balles
Bonjour,
Quelqu'un sait-il à quoi cela correspond ??
BASH=/bin/bash
BASHOPTS=cmdhist:extquote:etc...
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=([0]="0")
BASH_SOURCE=([0]="./truc.sh")
BASH_VERSINFO=([0]="4" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-pc-linux-gnu")
BASH_VERSION='4.2.25(1)-release'
COLORTERM=Terminal
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-3nKmfqPMJF,guid=9a759d413bdc0f5e00000048
DEFAULTS_PATH=/usr/share/gconf/gnome.default.path
DESKTOP_AUTOSTART_ID=108df735c621ba6662000020900001
DESKTOP_SESSION=gnome
DIRSTACK=()
DISPLAY=:0.0
EUID=1000
GDMSESSION=gnome
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GNOME_KEYRING_CONTROL=/home/dyt/.cache/keyring-YPkuc
GNOME_KEYRING_PID=2079
GPG_AGENT_INFO=/home/dyt/.cache/keyring-YPkuc/gpg:etc...
GROUPS=()
HOME=/home/dyt
HOSTNAME=ubuntu
HOSTTYPE=i686
IFS=/
LANG=fr_FR.UTF-8
LANGUAGE=fr:en_US:en
LC_ADDRESS=fr_FR.UTF-8
LC_IDENTIFICATION=fr_FR.UTF-8
LC_MEASUREMENT=fr_FR.UTF-8
LC_MONETARY=fr_FR.UTF-8
LC_NAME=fr_FR.UTF-8
LC_NUMERIC=fr_FR.UTF-8
LC_PAPER=fr_FR.UTF-8
LC_TELEPHONE=fr_FR.UTF-8
LC_TIME=fr_FR.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri
LOGNAME=dyt
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:etc...
MACHTYPE=i686-pc-linux-gnu
MANDATORY_PATH=/usr/share/gconf/gnome.mandatory.path
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/home/dyt/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
PIPESTATUS=([0]="0")
PPID=248
PS4='+ '
PWD=/home/dyt/exo
SESSION_MANAGER=local/ubuntu:@/tmp/.ICE-unix/2090,unix/ubuntu:etc...
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments
SHLVL=2
SSH_AGENT_PID=29
SSH_AUTH_SOCK=/home/dyt/.cache/keyring-KJPkuc/ssh
TERM=xterm
UBUNTU_MENUPROXY=libappmenu.so
UID=1000
USER=dyt
WINDOWID=4104
XAUTHORITY=/home/dyt/.Xauthority
XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome:/etc/xdg
XDG_CURRENT_DESKTOP=GNOME
XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
XDG_SESSION_COOKIE=b591c46553ca400000b-143237.45151-510448
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
_=
J'ai ce retour à un champs vide dans un script, vous voyez ?
Merci de votre aide, de vos lumières et de votre indulgence
Dernière modification par cerulean (Le 24/05/2015, à 20:41)
Hors ligne
#2 Le 24/05/2015, à 17:15
- pingouinux
Re : [résolu] Question à 2 balles
Bonjour,
Ça ressemble au résultat de la commande set. Ceci pourrait correspondre à ce genre de ligne dans ton script
set "$@"
avec un appel du script sans paramètres.
Hors ligne
#3 Le 24/05/2015, à 18:13
- cerulean
Re : [résolu] Question à 2 balles
Effectivement, je pensais bien avoir déjà vu ça ... Merci à toi.
En fait j'ai ce retour quand je ne réponds pas à un read -p "..."
Voici le bout de code :
read -p "Date de naissance (jj/mm/aaaa) : " datenaissance # ici. J'ai pu le zapper avec while true; do read -p "Date de naissance (jj/mm/aaaa) : " datenaissance ; [ -z $datenaissance ] && break ; done # mais un autre pb se pose, le script passe direct à "vérif du jour" cf. ci-après, et donc je dois entrer 2 fois "date de naissance" donc ce while n'est pas la solution ...
IFS=/
set $datenaissance
jour=$1
mois=$2
an=$3
# verif de l'année
{ [ $an -ge 1 ] 2> /dev/null ; } # si je réponds faux bash indique l'erreur suivante : ligne 40 : [: trop d'arguments. Pour éviter le msg d'erreur, je redirige les erreurs dans le puit, le tout à l'intérieur d'un regroupement de cmd. Il y a surement mieux ...
while [ $? != 0 ]
do
read -p "Saisissez l'année de votre naissance : " an
{ [ $an -ge 1 ] 2>/dev/null ; }
done
# verif du mois
{ [ $mois -ge 1 -a $mois -le 12 ] 2> /dev/null ; }
while [ $? != 0 ]
do
read -p "Saisissez un mois compris entre 1 et 12 : " mois
{ [ $mois -ge 1 -a $mois -le 12 ] 2> /dev/null ; }
done
# verif du jour
read -p "Entrez le jour de votre naissance : " jour
case $mois in # n'oublies pas ;; à la fin de chaque cas
1|01|3|03|5|05|7|07|8|08|10|12 )
nbjours=31
[ $jour -ge 1 -a $jour -le $nbjours ] 2>/dev/null # ; }
while [ $? != 0 ]
do
echo -n "Jour de naissance. Saisir un nombre entre 1 et $nbjours : "
read jour
[ $jour -ge 1 -a $jour -le $nbjours ] 2>/dev/null # ; }
done
;;
02|2 )
annee=$(( $an % 4 )) # vérif. des années bissextiles
if [ $annee -eq 0 ] ; then
nbjours=29
else
nbjours=28
fi
[ $jour -ge 1 -a $jour -le $nbjours ] 2>/dev/null # ; }
while [ $? != 0 ]
do
read -p "Il y avait $nbjours jours en Février $an. Saisissez le jour de votre naissance : " jour
[ $jour -ge 1 -a $jour -le $nbjours ] 2>/dev/null # ; }
done
;;
04|4|06|6|09|9|11 )
nbjours=30
[ $jour -ge 1 -a $jour -le $nbjours ] 2>/dev/null # ; }
while [ $? != 0 ]
do
read -p "Saisir un nombre entre 1 et $nbjours : " jour
[ $jour -ge 1 -a $jour -le $nbjours ] 2>/dev/null # ; }
done
;;
esac
datenaissance="$jour/$mois/$an"
Hors ligne
#4 Le 24/05/2015, à 18:36
- pingouinux
Re : [résolu] Question à 2 balles
Il faut que tu fasses
set -- $datenaissance
Hors ligne
#5 Le 24/05/2015, à 19:20
- cerulean
Re : [résolu] Question à 2 balles
En effet.
Je te remercie de ton aide.
Aussi, j'ai un autre pb ... comment je peux faire pour que le script reprenne après la fin du case ?
Si je rentre datenaissance dans le format demandé, le script reprend à "# vérif du jour" ... donc au début du case ...
Date de naissance (jj/mm/aaaa) : 01/01/1970
Entrez le jour de votre naissance :
Dernière modification par cerulean (Le 24/05/2015, à 20:01)
Hors ligne
#6 Le 24/05/2015, à 19:38
- pingouinux
Re : [résolu] Question à 2 balles
Je pense qu'il suffit de supprimer le read -p à la ligne n° 24.
Hors ligne
#7 Le 24/05/2015, à 19:52
- cerulean
Re : [résolu] Question à 2 balles
Ooops ...
Merci pour tout,
Bonne soirée
Hors ligne