#1 Le 10/12/2017, à 11:08
- pem1664
insertion caractères spéciaux script bash pour envoi sms
Salut!
j'ai adapté différents scripts pour m'envoyer par sms la température et l'hygrométrie d'une sonde dht22 et l'envoi de sms fonctionne mais je n'arrive pas à envoyer le caractère "°"
j'ai essayé différents trucs rien n'y fait..
quelqu'un saurait comment envoyer un caractère spécial via du bash?
MESSAGE=$(echo -e "IP Hopopop : "$IPactuelle"\n Température Hopopop : "$TEMP"°C\n Hygrométrie Hopopop : "$HUM"%")
echo $MESSAGE
w3m -dump "https://smsapi.free-mobile.fr/sendmsg?user=$NOM&pass=$PASSWD&msg=$MESSAGE"
Le saut de ligne fonctionne, le "%" donctionne mais pas le "°"
Dernière modification par pem1664 (Le 10/12/2017, à 11:15)
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#2 Le 10/12/2017, à 11:34
- Watael
Re : insertion caractères spéciaux script bash pour envoi sms
salut,
° n'est pas un caractère spécial pour le shell.
c'est quoi tous ces guillemets pour un seul echo ?
avec printf (pour formater des données) :
printf -v message 'IP Hopopop : %s\nTempérature Hopopop : %f°C\n Hygrométrie Hopopop : %f%' "$IPactuelle" "$temp" "$hum"
echo "$message"
les variables utilisateurs ne doivent pas être tout en majuscules, c'est réservé aux variables d'environnement système.
Dernière modification par Watael (Le 10/12/2017, à 11:35)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 10/12/2017, à 11:42
- pem1664
Re : insertion caractères spéciaux script bash pour envoi sms
Salut, sans les guillemets le echo prend ca comme du caractère et pas comme une variable, après pour les variables, c'est une convention que j'ai prise... je fais pas du grand script...
j'ai essayé ta solution mais ca me donne ca :
10.2
66.2
scripts/bash/ip_ext.sh: ligne 57 : printf: 10.2: nombre non valable
scripts/bash/ip_ext.sh: ligne 57 : printf: 66.2: nombre non valable
scripts/bash/ip_ext.sh: ligne 57 : printf: « % » : caractère de format manquant
IP Hopopop : 92.161.25.53 Température Hopopop : 0,000000°C Hygrométrie Hopopop : 0,000000
c'est vrai que j'avais pas pensé a passer par printf, néanmoins sur le sms que je reçois j'ai le même problème, le " ° " ne s'affiche pas
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#4 Le 10/12/2017, à 11:46
- bruno
Re : insertion caractères spéciaux script bash pour envoi sms
Bonjour,
Au vu du bout de script, je pense qu'il faut que la variable $MESSAGE soit encodée sous forme d'URL. Je ne sais pas comment on fait "urlencode" avec bash, mais cela doit se trouver.
#5 Le 10/12/2017, à 11:50
- Watael
Re : insertion caractères spéciaux script bash pour envoi sms
$ LC_NUMERIC=C printf 'IP Hopopop : %s\nTempérature Hopopop : %.2f°C\nHygrométrie Hopopop : %.2f\n' 10.0.0.2 10.2 90
IP Hopopop : 10.0.0.2
Température Hopopop : 10.20°C
Hygrométrie Hopopop : 90.00
pourquoi le SMS ne restitue-t-il pas le caractère degré ???
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 10/12/2017, à 12:04
- pem1664
Re : insertion caractères spéciaux script bash pour envoi sms
En modifiant ta ligne j'obtiens bien le bon résultat en console mais toujours pas le caractère ° en sms... c'est strange quand meme (en meme temps avec le echo j'avais le meme souci..
MESSAGE=$(printf 'IP Hopopop : %s\nTempérature Hopopop : %s°C\nHygrométrie Hopopop : %s%%\n' "$IPactuelle" "$TEMP" "$HUM")
10.3
66.2
IP Hopopop : 92.161.25.53 Température Hopopop : 10.3°C Hygrométrie Hopopop : 66.2%
sinon en utilisant ta ligne telle qu'elle :
MESSAGE=C printf 'IP Hopopop : %s\nTempérature Hopopop : %.1f°C\nHygrométrie Hopopop : %.1f%%\n' "$IPactuelle" "$TEMP" "$HUM"
j'ai ce résultat :
10.3
66.0
IP Hopopop : 92.161.25.53
scripts/bash/ip_ext.sh: ligne 59 : printf: 10.3: nombre non valable
Température Hopopop : 0,0°C
scripts/bash/ip_ext.sh: ligne 59 : printf: 66.0: nombre non valable
Hygrométrie Hopopop : 0,0%
@ Bruno je suis parti de ce fil https://forum.ubuntu-fr.org/viewtopic.php?id=1664551
Dernière modification par pem1664 (Le 10/12/2017, à 12:11)
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#7 Le 10/12/2017, à 12:20
- Watael
Re : insertion caractères spéciaux script bash pour envoi sms
MESSAGE ne s'applique pas aux nombres contrairement à LC_NUMERIC.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 10/12/2017, à 12:29
- pem1664
Re : insertion caractères spéciaux script bash pour envoi sms
MESSAGE ne s'applique pas aux nombres contrairement à LC_NUMERIC.
Ok, je ne savais pas..
en remplaçant par LC_NUMERIC je n'ai plus ce message d'erreur sur les nombres non valables mais comment dans ce cas je le fais passer dans mon sms?
LC_NUMERIC=C printf 'IP Hopopop : %s\nTempérature Hopopop : %.1f°C\nHygrométrie Hopopop : %.1f%%\n' "$IPactuelle" "$TEMP" "$HUM"
w3m -dump "https://smsapi.free-mobile.fr/sendmsg?user=$NOM&pass=$PASSWD&msg=$LC_NUMERIC"
et la je ne reçois rien
LC_NUMERIC=C printf 'IP Hopopop : %s\nTempérature Hopopop : %.1f°C\nHygrométrie Hopopop : %.1f%%\n' "$IPactuelle" "$TEMP" "$HUM"
MESSAGE=$LC_NUMERIC
echo $MESSAGE
w3m -dump "https://smsapi.free-mobile.fr/sendmsg?user=$NOM&pass=$PASSWD&msg=$MESSAGE"
et la non plus..
donc impossible de vérifier si le caractère ° passe
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#9 Le 10/12/2017, à 12:56
- Alex10336
Re : insertion caractères spéciaux script bash pour envoi sms
Bonjour,
Et un truc de ce genre ?
LC_NUMERIC=C Message=$(printf 'IP Hopopop : %s\nTempérature Hopopop : %.1f°C\nHygrométrie Hopopop : %.1f%%\n' "$IPactuelle" "$TEMP" "$HUM")
echo "$Message"
#https://stackoverflow.com/questions/296536/urlencode-from-a-bash-script
rawurlencode() {
local string="${1}"
local strlen=${#string}
local encoded=""
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}" # You can either set a return variable (FASTER)
REPLY="${encoded}" #+or echo the result (EASIER)... or both... :p
}
status=`curl -k -o /dev/null --silent --head --write-out '%{http_code}\n' "https://smsapi.free-mobile.fr/sendmsg?user=$NOM&pass=$PASSWD&msg=$( rawurlencode "$Message" )"`
Dernière modification par Alex10336 (Le 10/12/2017, à 13:00)
« On ne répond pas à une question par une autre question. » (moi ;-) )
Hors ligne
#10 Le 10/12/2017, à 12:59
- Watael
Re : insertion caractères spéciaux script bash pour envoi sms
d'ailleurs, c'est LC_MESSAGES
mais tu fais n'importe quoi !
$ LC_NUMERIC=C printf -v message 'IP Hopopop : %s\nTempérature Hopopop : %.2f°C\nHygrométrie Hopopop : %.2f%%' 10.0.0.2 10.2 90
$ echo "$message"
IP Hopopop : 10.0.0.2
Température Hopopop : 10.20°C
Hygrométrie Hopopop : 90.00%
$
ça, ça ne doit pas changer.
pour le SMS, je ne sais pas. essaie urlencode (comme l'a dit bruno), mais pour un seul caractère
LC_NUMERIC=C printf -v message 'IP Hopopop : %s\nTempérature Hopopop : %.2f°C\nHygrométrie Hopopop : %.2f%%' 10.0.0.2 10.2 90
https://www.ascii.cl/htmlcodes.htm
et je te le dis encore, les noms variables de variables tout en majuscules doivent être réservés aux variables d'environnement !
d'où ma confusion entre MESSAGE (alors que ça devrait être `message', ou `MeSsaGe', ou n'importe quel autre panachage) et LC_MESSAGES
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 10/12/2017, à 13:05
- pem1664
Re : insertion caractères spéciaux script bash pour envoi sms
Bonjour,
Et un truc de ce genre ?
LC_NUMERIC=C Message=$(printf 'IP Hopopop : %s\nTempérature Hopopop : %.1f°C\nHygrométrie Hopopop : %.1f%%\n' "$IPactuelle" "$TEMP" "$HUM") echo "$Message" #https://stackoverflow.com/questions/296536/urlencode-from-a-bash-script rawurlencode() { local string="${1}" local strlen=${#string} local encoded="" for (( pos=0 ; pos<strlen ; pos++ )); do c=${string:$pos:1} case "$c" in [-_.~a-zA-Z0-9] ) o="${c}" ;; * ) printf -v o '%%%02x' "'$c" esac encoded+="${o}" done echo "${encoded}" # You can either set a return variable (FASTER) REPLY="${encoded}" #+or echo the result (EASIER)... or both... :p } status=`curl -k -o /dev/null --silent --head --write-out '%{http_code}\n' "https://smsapi.free-mobile.fr/sendmsg?user=$NOM&pass=$PASSWD&msg=$( rawurlencode "$Message" )"`
Ta solution fonctionne, pour envoyer le SMS avec les bonnes valeurs mais toujours pas pour avoir le caractere ° dans le sms...
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#12 Le 10/12/2017, à 13:26
- Compte anonymisé
Re : insertion caractères spéciaux script bash pour envoi sms
Bonjour,
pour info :
$ urlencode °
%FF%FF
$ urlencode -d %FF%FF
urlencode est dans les choux pour ce caractère
$ rawurlencode °
%b0
$ urlencode -d %b0
rawurlencode (la fonction dans le script de #11 aussi) également (quoi que il donne le résultat en codage Windows-1252)
EDIT : en ce basant sur https://www.w3schools.com/tags/ref_urlencode.asp
le bon code est %C2%B0
$ urlencode -d %C2%B0
°
tu peux remplacer directement dans ton script les ° par des %C2%B0, ça sera plus simple si c'est que ce caractère qui pose problème
Dernière modification par Compte anonymisé (Le 10/12/2017, à 13:32)
#13 Le 10/12/2017, à 14:30
- Hizoka
Re : insertion caractères spéciaux script bash pour envoi sms
Juste pour info, si je m'envoie un sms et que j'écris :
"10° , %C2%B0"
le sms affiche bien
10°, °
Par contre j'utilise la commande :
curl --insecure "https://smsapi.free-mobile.fr/......"
mais après essai avec w3m -dump ça fonctionne quand même...
Dernière modification par Hizoka (Le 10/12/2017, à 15:04)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#14 Le 11/12/2017, à 11:02
- pem1664
Re : insertion caractères spéciaux script bash pour envoi sms
Salut à tous, et merci pour vos réponses, en effet comme dis Hizoka quand j'envoie direct par curl le caractère ° et bien ca passe
curl --insecure "https://smsapi.free-mobile.fr/sendmsg?user=32482961&pass=nom&pass=passwd&msg=°"
et je reçois bien le caractère °
alors pourquoi ca ne passe pas dans un echo ou bien un printf?
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#15 Le 11/12/2017, à 12:28
- bruno
Re : insertion caractères spéciaux script bash pour envoi sms
Re,
J'ai fait des tests avec ce script :
#!/bin/bash
TEMP=18
MESSAGE_TO_SEND=$(echo -e "Température Hopopop : "$TEMP"°C \n Humidité")
echo ${MESSAGE_TO_SEND}
USER_LOGIN="********"
API_KEY="********"
HTTP_STATUS_CODE=$(\
curl \
--write-out "%{http_code}" \
--silent \
--output /dev/null \
--get "https://smsapi.free-mobile.fr/sendmsg" \
--data "user=${USER_LOGIN}" \
--data "pass=${API_KEY}" \
--data-urlencode "msg=${MESSAGE_TO_SEND}" \
)
if [ "${HTTP_STATUS_CODE}" -eq 200 ]; then
exit 0
else
echo "Error: API responded with ${HTTP_STATUS_CODE}"
exit 1
fi
et je reçois :
Température Hopopop : 18C
Humidité
Maintenant si j'enlève un caractère :
MESSAGE_TO_SEND=$(echo -e "Température Hopopop : "$TEMP"°C \n Humidit")
Je reçois :
Température Hopopop : 18°C
Humidit
C'est reproductible avec différentes chaînes avec ou sans \n, si ça dépasse 38 caractères, le ° est enlevé ! Étrange non ?
Dernière modification par bruno (Le 11/12/2017, à 13:24)
#16 Le 12/12/2017, à 10:30
- pem1664
Re : insertion caractères spéciaux script bash pour envoi sms
C'est reproductible avec différentes chaînes avec ou sans \n, si ça dépasse 38 caractères, le ° est enlevé ! Étrange non ?
Ah? donc ca ne sert à rien que je m'escrime à chercher une solution.. c'est étrange comme tu dis..
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#17 Le 12/12/2017, à 11:07
- gigiair
Re : insertion caractères spéciaux script bash pour envoi sms
$ LC_NUMERIC=C printf 'IP Hopopop : %s\nTempérature Hopopop : %.2f°C\nHygrométrie Hopopop : %.2f\n' 10.0.0.2 10.2 90 IP Hopopop : 10.0.0.2 Température Hopopop : 10.20°C Hygrométrie Hopopop : 90.00
pourquoi le SMS ne restitue-t-il pas le caractère degré ???
Le message doit être codé au format des URL (percent-encoding). Le caractère ° est encodé %C2%B0.
Personnellement, jje compose mes messages avec Emacs
(url-encode-url "La température actuelle est de 20°")
"La%20temp%C3%A9rature%20actuelle%20est%20de%2020%C2%B0"
Il doit bien être possible de faire la même chose avec recode ou iconv, mais j'ai la flemme de chercher.
Dernière modification par gigiair (Le 12/12/2017, à 11:15)
--
JJR.
Hors ligne
#18 Le 12/12/2017, à 17:43
- Hizoka
Re : insertion caractères spéciaux script bash pour envoi sms
C'est reproductible avec différentes chaînes avec ou sans \n, si ça dépasse 38 caractères, le ° est enlevé ! Étrange non ?
curl --insecure "http://....ouiaezezireuireezh°iihgifgfdgfdk°oigfjgljikfdlkgklfdkglfkdljgldfkljgjdfkjl°klvdnhgrierhgregreghregeku°°jkgbdsgdfskjgjhdfjksgjdsk°°°kjfgdkjgfnd"
fonctionne chez moi...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#19 Le 12/12/2017, à 18:09
- bruno
Re : insertion caractères spéciaux script bash pour envoi sms
Chez moi aussi et d'autres chaînes bizarres aussi, par contre
"La température extérieure est de 18 °C"
Renvoie :
La température extérieure est de 18 C
"La température est de 18 °C" renvoie :
La température est de 18 °C
J'ai la même chose avec des caractères comme ³ ou ² …
Dernière modification par bruno (Le 12/12/2017, à 18:11)
#20 Le 12/12/2017, à 20:14
- Hizoka
Re : insertion caractères spéciaux script bash pour envoi sms
C'est très étrange...
"La température extérieure est de 18°°C"
"La température extérieure est de °8°C"
"La température extérieure est de °18°C"
renvoient ce à quoi on s'attend...
"La température extérieure est de 118°C"
"La température extérieure est de 18\°C"
"La température extérieure est de 18%C2%B0C"
"La%20temp%C3%A9rature%20ext%C3%A9rieure%20est%20de%2018%C2%B0%20C"
squizzent le °
par contre :
"La temperature exterieure est de 18 °C"
fonctionne (il faut virer les 2 é)...
mais si on rajoute 1 caractère, pouf rebelotte....
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne