Script.sh ?
mino2z
Messages postés
1
Statut
Membre
-
FireCode Messages postés 1 Statut Membre -
FireCode Messages postés 1 Statut Membre -
salut à tous le monde en faite j'ai un projet à rendre aujord'hui, c'est un script.sh qui est un jeu de connaissance de capitale et de pays et qu'on peut l'appeler de trois façons:
./script.sh -v Paris(par exemeple) --> le script lit le fichier capitales.txt et nous affiche une question "quel est le pays dont la capitale est Paris?" tu tape France il te dit bien joué (exemple).
./script.sh -p France (le méme mais à l'inverse)
./script.sh -battle --> c'est ici que j'ai le probléme, le script doit fixer le nombre de questions, les noms des joueurs et à chaque round il demande si on veut jouez -v ou -p (genre "vous voulez jouez au mode p ou v).
je vous donne ce que j'ai écrit et merci d'avance:
#!/bin/bash
if [ ! \( "$1" = "-v" -o "$1" = "-p" -o "$1" = "-battle" \) ]
then
echo "Erreur : le premier argument doit étre -v , -p ou -battle"
echo "Usage : $0 -p Pays, $0 -v Ville ou $0 -battle"
exit 1
fi
var=`find $(pwd) -name capitales.txt`
if $var = ""
then
echo "Accés au fichier capitales.txt impossible"
else
ligne=$(grep "$2" $var)
pays=${ligne%,*}
capitale=${ligne#*,}
fi
if [ "$1" = "-v" ]
then
echo " De quel pays $2 est-elle la capitale ? "
read reponse
if [ "$reponse" = "$pays" ]
then
echo "Bien joué!"
else
echo "Mais non! $2 est la capitale de $pays "
fi
elif [ "$1" = "-p" ]
then
echo "quel est la capitale de la (l') $2?"
read reponse
if [ "$reponse" = "$capitale" ]
then
echo "Bravo"
else
echo "Mais non!la capitale de $2 est $capitale"
fi
elif [ "$1" = "-battle" ]
then
echo "bienvenue les joueurs!"
echo "vous voulez combien de round?"
read nbround
echo "donnez le nom du joueur 1: "
read joueur1
echo "donnez le nom du joueur 2: "
read joueur2
for((i=0;i<nbround;i++))
do
echo "on commence avec toi $joueur1, tu veux jouer le mode capitale (tape v) ou le mode pays (tape p)"
read mode
./script.sh -v Paris(par exemeple) --> le script lit le fichier capitales.txt et nous affiche une question "quel est le pays dont la capitale est Paris?" tu tape France il te dit bien joué (exemple).
./script.sh -p France (le méme mais à l'inverse)
./script.sh -battle --> c'est ici que j'ai le probléme, le script doit fixer le nombre de questions, les noms des joueurs et à chaque round il demande si on veut jouez -v ou -p (genre "vous voulez jouez au mode p ou v).
je vous donne ce que j'ai écrit et merci d'avance:
#!/bin/bash
if [ ! \( "$1" = "-v" -o "$1" = "-p" -o "$1" = "-battle" \) ]
then
echo "Erreur : le premier argument doit étre -v , -p ou -battle"
echo "Usage : $0 -p Pays, $0 -v Ville ou $0 -battle"
exit 1
fi
var=`find $(pwd) -name capitales.txt`
if $var = ""
then
echo "Accés au fichier capitales.txt impossible"
else
ligne=$(grep "$2" $var)
pays=${ligne%,*}
capitale=${ligne#*,}
fi
if [ "$1" = "-v" ]
then
echo " De quel pays $2 est-elle la capitale ? "
read reponse
if [ "$reponse" = "$pays" ]
then
echo "Bien joué!"
else
echo "Mais non! $2 est la capitale de $pays "
fi
elif [ "$1" = "-p" ]
then
echo "quel est la capitale de la (l') $2?"
read reponse
if [ "$reponse" = "$capitale" ]
then
echo "Bravo"
else
echo "Mais non!la capitale de $2 est $capitale"
fi
elif [ "$1" = "-battle" ]
then
echo "bienvenue les joueurs!"
echo "vous voulez combien de round?"
read nbround
echo "donnez le nom du joueur 1: "
read joueur1
echo "donnez le nom du joueur 2: "
read joueur2
for((i=0;i<nbround;i++))
do
echo "on commence avec toi $joueur1, tu veux jouer le mode capitale (tape v) ou le mode pays (tape p)"
read mode
Configuration: Windows XP Internet Explorer 6.0
1 réponse
-
Salut mino2z,
Je me suis amusé à développer ton script, je ne sais pas s'il est trop tard il y a peut-être des erreurs:
le script:#! /bin/bash # <CONFIG/> #------------------------------------ SCR_NAME=`basename "$0"` DATA_DIR="`pwd`" DATA_FILE="${DATA_DIR}/capitales.dat" #------------------------------------ CAP_OPT="-c" CTR_OPT="-p" BTL_OPT="-b" #------------------------------------ MODE_CAP=0 MODE_CTR=0 #------------------------------------ MODE_BTL=0 ROUND_NB=0 PL1_NAME= PL2_NAME= #------------------------------------ # </CONFIG> if [ ! -f "$DATA_FILE" ]; then echo "${SCR_NAME}: fichier source \`~/`basename $DATA_FILE`' absent !" 2>&1 exit -1 else if [ ! -r "$DATA_FILE" ]; then echo "${SCR_NAME}: accès à \`~/`basename $DATA_FILE`' refusé !" 2>&1 exit -1 fi fi function usage() { echo "Usage: $SCR_NAME [ MODE ]" echo -e "\nModes:" echo "$CAP_OPT, lancer le mode capitale" echo "$CTR_OPT, lancer le mode pays" echo "$BTL_OPT, lancer le mode battle" } function pline() { echo "----------------------------" ;} # ========> SET PARAMETERS <========== if [ $# -eq 0 ]; then echo "${SCR_NAME}: paramètre manquant !" 2>&1 usage exit -1 fi while [ $# -gt 0 ]; do case "$1" in $CAP_OPT) if [ $MODE_CAP -ne 0 -o $MODE_CTR -ne 0 ]; then echo "${SCR_NAME}: paramètre non valide !" 2>&1 usage exit -1 else MODE_CAP=1 fi ;; $CTR_OPT) if [ $MODE_CAP -ne 0 -o $MODE_CTR -ne 0 ]; then echo "${SCR_NAME}: paramètre non valide !" 2>&1 usage exit -1 else MODE_CTR=1 fi ;; $BTL_OPT) if [ $MODE_CAP -ne 0 -o $MODE_CTR -ne 0 ]; then echo "${SCR_NAME}: paramètre non valide !" 2>&1 usage exit -1 else MODE_BTL=1 echo -e "\nMode battle ..." pline while : ; do printf "Entrez le nombre de partie: " read ROUND_NB test $ROUND_NB -gt 0 2> /dev/null if [ $? -ne 0 ]; then echo "Nombre \`$ROUND_NB' invalide !" else pline break fi done for PL_NB in 1 2; do while : ; do printf "Entrez le pseudo du joueur n${PL_NB}: " case $PL_NB in 1)read PL1_NAME test -n "$PL1_NAME" && pline && break ;; 2)read PL2_NAME test -n "$PL2_NAME" && pline && break ;; esac done done fi ;; -h|--help) usage exit 0 ;; *)echo "${SCR_NAME}: paramètre \`$1' non valide !" 2>&1 usage exit -1 ;; esac shift done function choice_mode() { while : ; do printf "Choisi un mode joueur ${1},\ncapitale: mode [1]\npays: mode [2]\nmode: " read RTR_MODE test $RTR_MODE -ge 1 -a $RTR_MODE -le 2 2> /dev/null if [ $? -ne 0 ]; then echo "Mode \`$RTR_MODE' non valide !" else break fi done return $RTR_MODE } function play_mode() { PLM_CAP=`cat "$DATA_FILE" | gawk -v CL=$CUR_LINE '(NR == (CL+1)) { sub("CAP:",""); printf("%s", toupper($0)); exit 1 }'` PLM_CTR=`cat "$DATA_FILE" | gawk -v CL=$CUR_LINE '(NR == CL) { sub("COUNTRY:",""); printf("%s",toupper($0)); exit 1 }'` test -n "$2" && PNAME_STR="Joueur $2, " case $1 in # CAPITAL MODE 1)echo -e "\nMode capitale ..." pline while : ; do printf "${PNAME_STR}Quelle est la capitale de: $PLM_CTR\nréponse: " read PLM_PLAYER_CAP test -n "$PLM_PLAYER_CAP" && break done PLM_PLAYER_CAP=`printf "$PLM_PLAYER_CAP" | gawk '{ printf("%s",toupper($0))}'` if [ "$PLM_PLAYER_CAP" == "$PLM_CAP" ]; then pline echo "Bonne réponse :p" pline else pline echo "Faux :(, c'était la capitale: $PLM_CAP" pline fi ;; # COUNTRY MODE 2)echo -e "\nMode pays ..." pline while : ; do printf "${PNAME_STR}Quel est le pays de la capitale: $PLM_CAP\nréponse: " read PLM_PLAYER_CTR test -n "$PLM_PLAYER_CTR" && break done PLM_PLAYER_CTR=`printf "$PLM_PLAYER_CTR" | gawk '{ printf("%s",toupper($0))}'` if [ "$PLM_PLAYER_CTR" == "$PLM_CTR" ]; then pline echo "Bonne réponse :p" pline else pline echo "Faux :(, c'était le pays: $PLM_CTR" pline fi ;; esac let $((CUR_LINE += 2)) } if [ $MODE_BTL -ne 0 ]; then # MODE BATTLE CUR_LINE=1 CURR_RND=0 while [ $CURR_RND -ne $ROUND_NB ]; do echo "PARTIE no `expr $CURR_RND + 1`:" pline test $CUR_LINE -ge `wc -l "$DATA_FILE" | gawk '{print $1}'` && CUR_LINE=1 # PLAYER 1 choice_mode "$PL1_NAME" CURR_MODE=$? play_mode $CURR_MODE "$PL1_NAME" # PLAYER 2 choice_mode "$PL2_NAME" CURR_MODE=$? play_mode $CURR_MODE "$PL2_NAME" let $((CURR_RND += 1)) done else CUR_LINE=`expr $RANDOM % $(wc -l capitales.dat | gawk '{ print $1}')` case $CUR_LINE in *0) CUR_LINE=1 ;; *2|*4|*6|*8) let $((CUR_LINE -= 1)) ;; esac if [ $MODE_CAP -ne 0 ]; then play_mode "1" else if [ $MODE_CTR -ne 0 ]; then play_mode "2" fi fi fi exit 0
Le fichier des capitales "capitales.dat":
COUNTRY:France CAP:Paris COUNTRY:Allemagne CAP:Berlin COUNTRY:Espagne CAP:Madrid COUNTRY:Italie CAP:Rome COUNTRY:Portugal CAP:Lisbonne COUNTRY:Royaume-uni CAP:Londre
Voilà, dis moi ce que t'en pense ...