Bash Les fonctions et les variables
xunil2003
-
xunil2003 -
xunil2003 -
Bonjour,
J'ai deux questions.
J'ai deux fonctions
1/ Comment fait on pour afficher deux fonctions sur la même ligne.
2/comment fait on pour mettre en variable le résultat d'une fonction.
Merci.
J'ai deux questions.
J'ai deux fonctions
sql5(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes5 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'" } sql2(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes2 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'" }
1/ Comment fait on pour afficher deux fonctions sur la même ligne.
sql5 sql2seul sql5 s'affiche ?
2/comment fait on pour mettre en variable le résultat d'une fonction.
execution2="sql5" execution3="sql2" echo $execution2, $execution3cela m'affiche sql5 sql2 la c'est normal, mais je n'arrive pas a trouver la bonne formule.
Merci.
A voir également:
- Bash Les fonctions et les variables
- Fonction si et - Guide
- Bingo bash - Télécharger - Divers Jeux
- Bash list ✓ - Forum Shell
- Codes secrets Android : accéder aux fonctions cachées - Guide
- Bash permission non accordée - Forum Shell
9 réponses
Salut,
1/ Comment fait on pour afficher deux fonctions sur la même ligne.
2/comment fait on pour mettre en variable le résultat d'une fonction.
1/ Comment fait on pour afficher deux fonctions sur la même ligne.
sql5; sql2
2/comment fait on pour mettre en variable le résultat d'une fonction.
execution2="$(sql5)" execution3="$(sql2)"
Bonjour,
merci de votre réponse.
Pour la question 1: quand je fait
il s'affiche dans le terminal
Alors qu'il les faut sur la même ligne comme ceci
Pour la question 2 : ca marche
Terminal
La lecture du son est effectué comme ceci
Merci.
merci de votre réponse.
Pour la question 1: quand je fait
sql5; sql2
il s'affiche dans le terminal
aplay /home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav
Alors qu'il les faut sur la même ligne comme ceci
aplay /home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wavsinon le programme ne s'execute pas pour la lecture du son.
Pour la question 2 : ca marche
execution2="$(sql5)" execution3="$(sql2)" $execution2 $execution3
Terminal
Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono serveur@debian:~$
La lecture du son est effectué comme ceci
aplay /home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav
Merci.
Bonjour,
Non,
sql15 ---> aplay
sql12 ---> /home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav
mais quand je fait
Le terminal ne comprend pas, il affiche
Alors qu'il les faut sur la même ligne comme ceci
Merci.
Non,
sql15 ---> aplay
sql12 ---> /home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav
mais quand je fait
sql5; sql2
Le terminal ne comprend pas, il affiche
aplay /home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav
Alors qu'il les faut sur la même ligne comme ceci
aplay /home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav
Merci.
@zipe31 : je pense que le nom de la commande à lancer est contenu dans la base de donnée...
@xunil2003 : la syntaxe utilisée à l'origine devrait fonctionner, tu n'as pas un problème de guillemets ?
exemple/test :
Ça affiche bien blabla.
EDIT ah oui, tu le disait aussi en fait... C'est avec les fonctions que ça marche pas.
Je pense que tu n'as pas le choix et qu'il faut passer par des variables, car là sql2 est considéré comme un argument pour sql5.
@xunil2003 : la syntaxe utilisée à l'origine devrait fonctionner, tu n'as pas un problème de guillemets ?
exemple/test :
t1="echo" t2="blabla" $t1 $t2
Ça affiche bien blabla.
EDIT ah oui, tu le disait aussi en fait... C'est avec les fonctions que ça marche pas.
Je pense que tu n'as pas le choix et qu'il faut passer par des variables, car là sql2 est considéré comme un argument pour sql5.
Bonjour,
Les fonction ressemble à ceci :
sql5(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes5 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'"
}
sql2(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes2 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'"
}
Oui il affiche bien "blabla"
Merci.
Les fonction ressemble à ceci :
sql5(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes5 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'"
}
sql2(){
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
--default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes2 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'"
}
t1="echo" t2="blabla" $t1 $t2
Oui il affiche bien "blabla"
Merci.
Essaies comme ça :
Puis :
sql5(){ $(mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes5 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'") } sql2(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes2 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'" }
Puis :
sql15 sql12
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Avec ceci
Avec ceci
sql5(){ $(mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes5 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'") } sql2(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes2 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'" } Puis : sql15 sql12
Le terminal bloc ^CAborted by signal Interrompre... serveur@debian:~$
salut,
mais t'as combien de commandes ?
t'es sûr qu'utiliser une base de données sql, plutôt que quelques fichiers plats, est une bonne idée ?
moi, ça me paraît lourd.
$(sql15) $(sql12)
mais t'as combien de commandes ?
t'es sûr qu'utiliser une base de données sql, plutôt que quelques fichiers plats, est une bonne idée ?
moi, ça me paraît lourd.
Bonjour,
Avec
c'est pareil le terminal bloc
Merci.
Avec
sql5(){ $(mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes5 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'") } sql2(){ $(mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes2 FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'") }
c'est pareil le terminal bloc
^CAborted by signal Interrompre... serveur@debian:~$
Merci.
hello
$ sql5() { aplay $* ; } $ sql2() { echo "/home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav" ; } $ $ sql5 $(sql2) /home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav: No such file or directory $
bonjour,
Ce n'est pas bon car l'utilisateur doit pouvoir choisir le lecteur audio (En fonction des Os aplay n'est pas disponible) qui veut utiliser.
Par contre j'ai trouvé une solution , je fait comme ceci.
Je ne sais pas si il est possible de faire une jointure des 3 tables afin de faire une seule fonction, afin de réduire les lignes de code ?
Pour le fichier log je demande si c'est pas mieux d'écrire dans une table mysql que dans un fichier txt, surtout pour l'affichage du rapport (fichier log) afin d'eviter le traitement ligne par ligne mot par mot pour les colonnes (mise en tableau d'un fichier txt) ?
Merci.
Table1 - bash
Table2 - config
Table3 - son
Table - log
Merci.
Ce n'est pas bon car l'utilisateur doit pouvoir choisir le lecteur audio (En fonction des Os aplay n'est pas disponible) qui veut utiliser.
$ sql5() { aplay $* ; } $ sql2() { echo "/home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav" ; } $ $ sql5 $(sql2) /home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav: No such file or directory $
Par contre j'ai trouvé une solution , je fait comme ceci.
Je ne sais pas si il est possible de faire une jointure des 3 tables afin de faire une seule fonction, afin de réduire les lignes de code ?
Pour le fichier log je demande si c'est pas mieux d'écrire dans une table mysql que dans un fichier txt, surtout pour l'affichage du rapport (fichier log) afin d'eviter le traitement ligne par ligne mot par mot pour les colonnes (mise en tableau d'un fichier txt) ?
Merci.
#!/bin/bash hote_db="localhost" nom_bd="domotique" login_db="xxxx" pass_bd="xxxxxx" #----------------- TABLE1 BASH ----------------- format_texte="utf8" #select_noms_colonnes="id,cmu,ordre_on,fichier_on,macro_on,ordre_off,fichier_off,macro_off,ordre_dim,fichier_dim,macro_dim,ordre_bri,fichier_bri,macro_bri" nom_table1="bash" colonne_recherche1="cmu" #select_noms_colonnes1="prog" select_noms_colonnes1_1="ordre_on" select_noms_colonnes1_2="fichier_on" select_noms_colonnes1_3="macro_on" recherche1="A4" sql1(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes1_1 FROM $nom_table1 WHERE $colonne_recherche1 LIKE '$recherche1%'" } sql2(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes1_2 FROM $nom_table1 WHERE $colonne_recherche1 LIKE '$recherche1%'" } sql3(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes1_3 FROM $nom_table1 WHERE $colonne_recherche1 LIKE '$recherche1%'" } #--------------- TABLE2 CONFIG ---------------- format_texte="utf8" #select_noms_colonnes="id,lecteur_audio, chemin_audio_bash, chemin_audio_web" nom_table2="config" colonne_recherche2="id" recherche2="0" select_noms_colonnes2_1="lecteur_audio" select_noms_colonnes2_2="chemin_audio_bash" sql4(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes2_1 FROM $nom_table2 WHERE $colonne_recherche2 LIKE '$recherche2%'" } sql5(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes2_2 FROM $nom_table2 WHERE $colonne_recherche2 LIKE '$recherche2%'" } #--------------- TABLE3 SON ---------------- format_texte="utf8" #select_noms_colonnes="id, cmu, son_on, son_off, son_dim, son_bri" nom_table3="son" colonne_recherche3="cmu" recherche3="A4" select_noms_colonnes3_1="son_on" select_noms_colonnes3_2="son_off" select_noms_colonnes3_3="son_dim" select_noms_colonnes3_4="son_bri" sql6(){ mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes3_1 FROM $nom_table3 WHERE $colonne_recherche3 LIKE '$recherche3%'" } case "$PROGRAMME" in Asterisk) programme="Asterisk" ;; Crontab) programme="Crontab" ;; php) programme="PHP" ;; "") programme="Script bash" ;; esac utilisateur=$(whoami) date1=$(date +'%Y-%m') # date fr mois annee pour création du fichier log date2=$(date +'%d/%m/%Y') # date fr jour mois annee heure=$(date +%H:%M:%S) # heure Fr H M S #date3=$(date + '%d-%m-%Y - %H:%M:%S') # date et heure Fr jour mois annee - H M S ordre_domotique="$(sql1)" fichier="$(sql2)" macro="$(sql3)" lecteur="$(sql4)" chemin_audio_bash="$(sql5)" nom_fichier_audio="$(sql6)" #----- Execute l'ordre domotique ------ $ordre_domotique #----- Ecriture dans le fichier log ------ echo "$date2 - $heure - $utilisateur - $ordre_domotique - $fichier - $macro - $programme" >> /home/serveur/Domotique/rapports/ordres/$date1-rapport-ordres.log #----- Execute le son de confirmation de l'ordre domotique ------ $lecteur $chemin_audio_bash$nom_fichier_audio
Table1 - bash
id cmu ordre_on fichier_on macro_on ordre_off fichier_off macro_off ordre_dim fichier_dim macro_dim ordre_bri fichier_bri macro_bri
Table2 - config
id lecteur_audio chemin_audio_bash chemin_audio_web
Table3 - son
id cmu son_on son_off son_dim son_bri
Table - log
id date heure user ordre_x10 fichier macro execute_par 0 27-07-2012 00:39:27 serveur cm15 A4 On a4-on aucun macro Asterisk 1 27-07-2012 00:40:51 root cm15 A4 On a4-on aucun macro script bash
Merci.