Mettre une case dans une case
xunil2003
Messages postés
830
Statut
Membre
-
xunil2003 Messages postés 830 Statut Membre -
xunil2003 Messages postés 830 Statut Membre -
Bonjour,
Pourriez- vous me dire pourquoi la je n'arrive pas a faire marché une case dans une case ?
La 1ère case ""${date2_us}"\ 5D\ 5A\ 02\ 00\ 16* )" est lue, mais la casse ""${date2_us}"\ 5D\ 5A\ 02\ 01\ 13* )" suivante n'est pas lue.
Pourquoi ? Quelle erreur ai-je fait ?
Merci.
Script
Résultat du script
La case "06/10 17:37:35 5D 5A 02 01 13" n'a pas été lue car il n'est pas affiché "E1 Off -----> Radio reveil".
Merci.
Pourriez- vous me dire pourquoi la je n'arrive pas a faire marché une case dans une case ?
La 1ère case ""${date2_us}"\ 5D\ 5A\ 02\ 00\ 16* )" est lue, mais la casse ""${date2_us}"\ 5D\ 5A\ 02\ 01\ 13* )" suivante n'est pas lue.
Pourquoi ? Quelle erreur ai-je fait ?
Merci.
Script
#!/bin/bash
exec 6<>/dev/tcp/192.168.0.1/1099
while read <&6
do
date_us=$(date +%m/%d )
heure_us=$(date +%H:%M:%S)
date2_us="$date_us $heure_us"
#echo "date = ${date2_us}"
# Show the line on standard output just for debugging.
echo $REPLY >&1
case $REPLY in
#*5D\ 5A\ 02\ 00\ 16* )
#*Rx\ PL\ House:\ E\ Func:\ "Bright(5)" )
"${date2_us}"\ 5D\ 5A\ 02\ 00\ 16* )
echo "E1 -----> Radio reveil"
case $REPLY in
*5D\ 5A\ 02\ 01\ 12* )
echo "E1 On -----> Radio reveil"
#----------------- FONCTION REQUETE TABLE 1 CONFIG ----------------
#Requete chemin du fichier ordre domotique
sql1(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=utf8 -B -N -e "SELECT chemin_script_bash_x10 FROM config WHERE id LIKE '0%'"
}
#Requete nom du fichier de l'ordre domotique
sql2(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=utf8 -B -N -e "SELECT fichier_on FROM bash WHERE cmu LIKE 'e1'"
}
$(sql1)$(sql2)
;;
"${date2_us}"\ 5D\ 5A\ 02\ 01\ 13* )
echo "E1 Off -----> Radio reveil"
#----------------- FONCTION REQUETE TABLE 1 CONFIG ----------------
#Requete chemin du fichier ordre domotique
sql1(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=utf8 -B -N -e "SELECT chemin_script_bash_x10 FROM config WHERE id LIKE '0%'"
}
#Requete nom du fichier de l'ordre domotique
sql2(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=utf8 -B -N -e "SELECT fichier_off FROM bash WHERE cmu LIKE 'e1'"
}
$(sql1)$(sql2)
;;
esac
;;
*5D\ 5A\ 02\ 00\ 1E* )
echo "E2 -----> Radio reveil"
case $REPLY in
*5D\ 5A\ 02\ 01\ 12* )
echo "E2 On -----> Radio reveil"
#----------------- FONCTION REQUETE TABLE 1 CONFIG ----------------
#Requete chemin du fichier ordre domotique
sql1(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=utf8 -B -N -e "SELECT chemin_script_bash_x10 FROM config WHERE id LIKE '0%'"
}
#Requete nom du fichier de l'ordre domotique
sql2(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=utf8 -B -N -e "SELECT fichier_on FROM bash WHERE cmu LIKE 'e2'"
}
$(sql1)$(sql2)
;;
*5D\ 5A\ 02\ 01\ 13* )
echo "E2 Off -----> Radio reveil"
#----------------- FONCTION REQUETE TABLE 1 CONFIG ----------------
#Requete chemin du fichier ordre domotique
sql1(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=utf8 -B -N -e "SELECT chemin_script_bash_x10 FROM config WHERE id LIKE '0%'"
}
#Requete nom du fichier de l'ordre domotique
sql2(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=utf8 -B -N -e "SELECT fichier_off FROM bash WHERE cmu LIKE 'e2'"
}
$(sql1)$(sql2)
;;
esac
;;
esac
done
exit 0
Résultat du script
06/10 17:37:34 Not supported 5A 06/10 17:37:34 5D 5A 02 00 16 E1 -----> Radio reveil 06/10 17:37:35 Not supported 5A 06/10 17:37:35 5D 5A 02 01 13
La case "06/10 17:37:35 5D 5A 02 01 13" n'a pas été lue car il n'est pas affiché "E1 Off -----> Radio reveil".
Merci.
A voir également:
- Mettre une case dans une case
- Aller à la ligne dans une case excel - Guide
- Excel case choix multiple - Guide
- Case à cocher excel - Forum MacOS
- Supprimer case à cocher excel ✓ - Forum Excel
- Comment cocher une case sans souris ✓ - Forum Windows
3 réponses
Le programme est assez dur à lire en l'état car pas très bien écrit.
- Tu pourrais éviter d'écrire à chaque fois "mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" --default-character-set=utf8 -B -N -e" en définissant une variable par exemple nommée mysql.
- Le code n'est pas très bien indenté
- Des fonctions sont définies à l'intérieur du while
- Certaines variables qui ne semblent pas modifiées dans la boucle (date_us...) devraient être initialisée en dehors de la boucle.
- Tu pourrais définir des constantes pour les séquences héxadécimales en début de programme.
Ensuite pour qu'on puisse comprendre ce qui cloche, vu qu'on ne peut pas reproduire ce qui se passe n'ayant pas la base mysql que tu utilises, il faudrait nous dire quelle instruction plante.
Par exemple supposons que ce soit une requête sql qui ne donne pas le résultat escompté, tu devrait tenter de la lancer dans mysql, vérifier qu'elle retourne ce qu'il faut, puis l'injecter dans ton script, etc. Bref il faut y aller progressivement :-)
Bonne chance
- Tu pourrais éviter d'écrire à chaque fois "mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" --default-character-set=utf8 -B -N -e" en définissant une variable par exemple nommée mysql.
- Le code n'est pas très bien indenté
- Des fonctions sont définies à l'intérieur du while
- Certaines variables qui ne semblent pas modifiées dans la boucle (date_us...) devraient être initialisée en dehors de la boucle.
- Tu pourrais définir des constantes pour les séquences héxadécimales en début de programme.
Ensuite pour qu'on puisse comprendre ce qui cloche, vu qu'on ne peut pas reproduire ce qui se passe n'ayant pas la base mysql que tu utilises, il faudrait nous dire quelle instruction plante.
Par exemple supposons que ce soit une requête sql qui ne donne pas le résultat escompté, tu devrait tenter de la lancer dans mysql, vérifier qu'elle retourne ce qu'il faut, puis l'injecter dans ton script, etc. Bref il faut y aller progressivement :-)
Bonne chance
salut,
Comme l'a très justement fait remarquer mamiemando, les fonctions devraient être définies en dehors de la boucle while.
Elles sont toutes quasiment identiques, il pourrait n'y en avoir qu'une qui prendrait en argument le motif de recherche (0%, e1, e2).
De plus, certains case se servent d'exactement la même fonction.
Pourquoi les exécutes-tu dans une substitution de commandes ?
Une fois définies, les fonctions sont des commandes comme les autres.
Comme l'a très justement fait remarquer mamiemando, les fonctions devraient être définies en dehors de la boucle while.
Elles sont toutes quasiment identiques, il pourrait n'y en avoir qu'une qui prendrait en argument le motif de recherche (0%, e1, e2).
De plus, certains case se servent d'exactement la même fonction.
Pourquoi les exécutes-tu dans une substitution de commandes ?
Une fois définies, les fonctions sont des commandes comme les autres.
Bonjour,
Merci mamiemando pour votre réponse.
C'est un problème que je n'arrive pas a expliquer
Mais j'ai une question :
Est il possible de mettre une variable dans une case ?
Résultat
Merci.
Merci mamiemando pour votre réponse.
C'est un problème que je n'arrive pas a expliquer
Mais j'ai une question :
Est il possible de mettre une variable dans une case ?
*5D\ 5A\ 02\ 00\ 16\ )
echo "E1 -----> Radio reveil"
cmu=e1
;;
*5D\ 5A\ 02\ 01\ 12\ )
echo "On" # -----> Radio reveil
action=on
;;
*5D\ 5A\ 02\ 01\ 13\ )
echo "Off" # -----> Radio reveil
action=off
;;
$cmu\ $action )
echo "Résultat : $cmu $action"
echo "$cmu $action -----> Radio reveil (test)"
action=on
#------- FONCTION REQUETE TABLE 1 CONFIG ------
#Requete chemin du fichier ordre domotique
sql1(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=utf8 -B -N -e "SELECT chemin_script_bash_x10 FROM config WHERE id LIKE '0%'"
}
#Requete nom du fichier de l'ordre domotique
sql2(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=utf8 -B -N -e "SELECT fichier_$action FROM bash WHERE cmu LIKE '$cmu'"
}
$(sql1)$(sql2)
;;
Résultat
E1 -----> Radio reveil Off
Merci.
Je ne suis pas du même avis. Les commandes "complexes" devraient être "stockées" dans une fonction (l'utilisation de variables peut poser des problèmes de découpage en mots).