Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.

En 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... wink
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.

Hors ligne

#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.

En 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.

En ligne

#8 Le 10/12/2017, à 12:29

pem1664

Re : insertion caractères spéciaux script bash pour envoi sms

Watael a écrit :

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 hmm

LC_NUMERIC=C printf -v message 'IP Hopopop : %s\nTempérature Hopopop : %.2f&deg;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.

En ligne

#11 Le 10/12/2017, à 13:05

pem1664

Re : insertion caractères spéciaux script bash pour envoi sms

Alex10336 a écrit :

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)

Hors ligne

#16 Le 12/12/2017, à 10:30

pem1664

Re : insertion caractères spéciaux script bash pour envoi sms

bruno a écrit :

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

Watael a écrit :
$ 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)

Hors ligne

#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