Ad Widget

Collapse

Gsm шлюз

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • nikitos35
    Senior Member
    • Jun 2014
    • 166

    #16
    Originally posted by Kos
    Сдаётся мне, что вместо двойных кавычек, как в примере sadman-а:
    Code:
    PHONENR=`echo "$1" | sed s#\s##`
    , в Вашем скрипте используется сочетание """:
    Code:
    PHONENR=`echo "$1" | sed s#\s##`
    Кос, как же правильней сделать?

    Мне именно все &quot заключить в кавычки?
    То есть в первой строка будет PHONENR=`echo """$1""" | sed s#\s##`

    Comment

    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #17
      Прозрачно намекаю: в скрипте не должно быть никаких """ (с амперсэндами и точками с запятой, сбивающими шелл). Должны быть обычные двойные кавычки (как указано в примере).

      То же самое относится и к остальным строкам и сочетаниям. Например, в четвёртой строке у Вас вместо
      Code:
      echo "To: чего-то-там" >> ${LOGFILE}
      написано:
      Code:
      echo "To: чего-то-там" >> ${LOGFILE}
      Видите ли разницу?

      Comment

      • nikitos35
        Senior Member
        • Jun 2014
        • 166

        #18
        C quot поправил
        Теперь другое сообщение (см. вложение)
        Скрипт выглядит теперь так

        #!/bin/sh
        PHONENR=`echo "$1" | sed s#\s##`
        LOGFILE="/var/log/sms.log"
        STR=${2// /%20}
        echo "To: '$1' Text: '$2'" >> ${LOGFILE}
        curl --globoff "http://100.30.10.203:80/sendsms?username=admin&password=Sdfwgvq3t4585i6kjh r&phonenumber=xxx&message=xxx&[port=xxx&][report=xxx&][timeout=xxx]; amp;charset=UTF8" 1>>${LOGFILE} 2>&1
        Attached Files

        Comment

        • sadman
          Senior Member
          • Dec 2010
          • 1611

          #19
          Детский сад какой-то.

          https://en.wikipedia.org/wiki/List_o...ity_references ^F Character entity references in HTML

          Вот этой XML/HTML фигни в скрипте на баше быть не должно.

          Comment

          • nikitos35
            Senior Member
            • Jun 2014
            • 166

            #20
            СМС стали уходить из CLI
            Но уходять с текстом test
            А как сделать, чтобы текст с пробелами уходил test one
            Причем из браузера с пробелами уходит, а из CLI нет

            Comment

            • Kos
              Senior Member
              Zabbix Certified SpecialistZabbix Certified Professional
              • Aug 2015
              • 3404

              #21
              Я не знаю, что Вы хотите сделать (возможно, просто потроллить), но вижу, что на данный момент:
              • у Вас ругань на четвёртую строку. Такая подстановка значения переменной с заменой - это особенность интерпретатора bash, которая отсутствует в других шеллах, в том числе POSIX sh. Но в первой строке Вы явно указываете обрабатывать этот скрипт не Башем, а именно стандартным шеллом (/bin/sh).
              • в следующих строках, как Вам указал sadman, по-прежнему остались конструкции с амперсандом.
              • при вызове утилиты curl в её параметрах используются квадратные скобки, которые тоже являются спецсимволом для шелла. Подозреваю, что в примере, из которого Вы брали эту строку, имелось в виду, что то, что написано в квадратных скобках, является необязательным (т.е. если Вам надо - то можете указать, а если не укажете - будут использоваться какие-то разумные умолчания). Но сами квадратные скобки там явно не нужны.

              Comment

              • nikitos35
                Senior Member
                • Jun 2014
                • 166

                #22
                Originally posted by Kos
                Я не знаю, что Вы хотите сделать (возможно, просто потроллить), но вижу, что на данный момент:
                • у Вас ругань на четвёртую строку. Такая подстановка значения переменной с заменой - это особенность интерпретатора bash, которая отсутствует в других шеллах, в том числе POSIX sh. Но в первой строке Вы явно указываете обрабатывать этот скрипт не Башем, а именно стандартным шеллом (/bin/sh).
                • в следующих строках, как Вам указал sadman, по-прежнему остались конструкции с амперсандом.
                • при вызове утилиты curl в её параметрах используются квадратные скобки, которые тоже являются спецсимволом для шелла. Подозреваю, что в примере, из которого Вы брали эту строку, имелось в виду, что то, что написано в квадратных скобках, является необязательным (т.е. если Вам надо - то можете указать, а если не укажете - будут использоваться какие-то разумные умолчания). Но сами квадратные скобки там явно не нужны.
                Да не, я без троллинга.
                СМС из CLI у меня приходят на телефон, т.е. в скрипте все исправил
                Но я заранее предполагаю, что в заббиксе будет настроен текст уведомления "Нет связи с сервером" в этом сообщении три пробела.
                И когда из CLI запускаю скрипт с текстом test test, то во входящем смс только одно слово test, второго нет. С этим и вопрос, почему второе слово test не вошло в текст сообщения

                Comment

                • yukra
                  Senior Member
                  • Apr 2013
                  • 1359

                  #23
                  Originally posted by nikitos35
                  И когда из CLI запускаю скрипт с текстом test test, то во входящем смс только одно слово test, второго нет. С этим и вопрос, почему второе слово test не вошло в текст сообщения
                  Попробуйте запустить не
                  Code:
                  ./script test test
                  , а
                  Code:
                  ./script 'test test'
                  . То есть обернуть "строку с пробелами" в одинарные (ну можно и двойные, в зависимости от вашего шелла) кавычки

                  Comment

                  • nikitos35
                    Senior Member
                    • Jun 2014
                    • 166

                    #24
                    Originally posted by yukra
                    Попробуйте запустить не
                    Code:
                    ./script test test
                    , а
                    Code:
                    ./script 'test test'
                    . То есть обернуть "строку с пробелами" в одинарные (ну можно и двойные, в зависимости от вашего шелла) кавычки
                    Ни те ни те ковычки не спасают

                    Comment

                    • Kos
                      Senior Member
                      Zabbix Certified SpecialistZabbix Certified Professional
                      • Aug 2015
                      • 3404

                      #25
                      Originally posted by nikitos35
                      И когда из CLI запускаю скрипт с текстом test test, то во входящем смс только одно слово test, второго нет. С этим и вопрос, почему второе слово test не вошло в текст сообщения
                      Потому что Ваш скрипт обрабатывает только два параметра: номер телефона и текст сообщения. А когда Вы вызываете скрипт так:
                      Code:
                      ИмяСкрипта НомерТелефона test test
                      то передаёте ему не два, а три параметра.

                      Чтобы передать одним параметром несколько слов, разделённых пробелами, надо при вызове скрипта окружать их кавычками:
                      Code:
                      ИмяСкрипта НомерТелефона "test1 test2 test3"

                      Comment

                      • sadman
                        Senior Member
                        • Dec 2010
                        • 1611

                        #26
                        А еще неплохо бы научиться таким заклинаниям: https://yandex.ru/search/?text=curl%...B5%D0%BB&lr=19

                        Comment

                        • Kos
                          Senior Member
                          Zabbix Certified SpecialistZabbix Certified Professional
                          • Aug 2015
                          • 3404

                          #27
                          Originally posted by sadman
                          А еще неплохо бы научиться таким заклинаниям: https://yandex.ru/search/?text=curl%...b5%d0%bb&lr=19
                          Да, вроде бы, там в скрипте это делает как раз 4-я строка. Заменяет пробелы из второго параметра на "%20".

                          Comment

                          • sadman
                            Senior Member
                            • Dec 2010
                            • 1611

                            #28
                            Originally posted by kos
                            Да, вроде бы, там в скрипте это делает как раз 4-я строка. Заменяет пробелы из второго параметра на "%20".
                            Но используется ли она после того - вот вопрос...

                            Comment

                            • nikitos35
                              Senior Member
                              • Jun 2014
                              • 166

                              #29
                              Originally posted by Kos
                              Потому что Ваш скрипт обрабатывает только два параметра: номер телефона и текст сообщения. А когда Вы вызываете скрипт так:
                              Code:
                              ИмяСкрипта НомерТелефона test test
                              то передаёте ему не два, а три параметра.

                              Чтобы передать одним параметром несколько слов, разделённых пробелами, надо при вызове скрипта окружать их кавычками:
                              Code:
                              ИмяСкрипта НомерТелефона "test1 test2 test3"
                              Команда
                              ./scriptsms.sh 89190233886 "test test"

                              А логе это
                              To:'8*********6' Text: 'test test'
                              <?xml version="1.0" encoding="iso-8859-1"?>
                              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                              <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
                              <head>
                              <title>400 - Bad Request</title>
                              </head>
                              <body>
                              <h1>400 - Bad Request</h1>
                              </body>
                              </html>


                              Конечный вид скрипта
                              #!/bin/sh
                              PHONENR=$1
                              BODY=$2
                              LOGFILE="/var/log/sms.log"
                              echo "To:'$1' Text: '$2'%20''" >> ${LOGFILE}
                              curl --globoff "http://100.30.10.203:80/sendsms?username=admin&password=Sdfwgvq3t4585i6kjh r&phonenumber=${PHONENR}&message=${BODY}&charset=U TF8" >> ${LOGFILE}
                              Last edited by nikitos35; 14-07-2017, 12:10.

                              Comment

                              • Kos
                                Senior Member
                                Zabbix Certified SpecialistZabbix Certified Professional
                                • Aug 2015
                                • 3404

                                #30
                                Логично. Вы убрали преобразование пробелов, о котором я упоминал в предыдущем своём сообщении. В результате пытаетесь засовывать эти пробелы прямо в URL, передаваемый cURL-у. А в URL-ах пробелы недопустимы, поэтому и получаете 400 Bad request в ответ.

                                А ещё на этом форуме можно использовать форматирование текста: вставлять цитаты, помечать текст как код (тогда он отображается моноширинным шрифтом без другого форматирования) и т.п. Сильно облегчает восприятие.
                                Last edited by Kos; 14-07-2017, 12:12.

                                Comment

                                Working...