Ad Widget
Collapse
Gsm шлюз
Collapse
X
-
Прозрачно намекаю: в скрипте не должно быть никаких """ (с амперсэндами и точками с запятой, сбивающими шелл). Должны быть обычные двойные кавычки (как указано в примере).
То же самое относится и к остальным строкам и сочетаниям. Например, в четвёртой строке у Вас вместо
написано:Code:echo "To: чего-то-там" >> ${LOGFILE}
Видите ли разницу?Code:echo "To: чего-то-там" >> ${LOGFILE}Comment
-
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>&1Comment
-
Детский сад какой-то.
https://en.wikipedia.org/wiki/List_o...ity_references ^F Character entity references in HTML
Вот этой XML/HTML фигни в скрипте на баше быть не должно.Comment
-
Я не знаю, что Вы хотите сделать (возможно, просто потроллить), но вижу, что на данный момент:- у Вас ругань на четвёртую строку. Такая подстановка значения переменной с заменой - это особенность интерпретатора bash, которая отсутствует в других шеллах, в том числе POSIX sh. Но в первой строке Вы явно указываете обрабатывать этот скрипт не Башем, а именно стандартным шеллом (/bin/sh).
- в следующих строках, как Вам указал sadman, по-прежнему остались конструкции с амперсандом.
- при вызове утилиты curl в её параметрах используются квадратные скобки, которые тоже являются спецсимволом для шелла. Подозреваю, что в примере, из которого Вы брали эту строку, имелось в виду, что то, что написано в квадратных скобках, является необязательным (т.е. если Вам надо - то можете указать, а если не укажете - будут использоваться какие-то разумные умолчания). Но сами квадратные скобки там явно не нужны.
Comment
-
Да не, я без троллинга.Я не знаю, что Вы хотите сделать (возможно, просто потроллить), но вижу, что на данный момент:- у Вас ругань на четвёртую строку. Такая подстановка значения переменной с заменой - это особенность интерпретатора bash, которая отсутствует в других шеллах, в том числе POSIX sh. Но в первой строке Вы явно указываете обрабатывать этот скрипт не Башем, а именно стандартным шеллом (/bin/sh).
- в следующих строках, как Вам указал sadman, по-прежнему остались конструкции с амперсандом.
- при вызове утилиты curl в её параметрах используются квадратные скобки, которые тоже являются спецсимволом для шелла. Подозреваю, что в примере, из которого Вы брали эту строку, имелось в виду, что то, что написано в квадратных скобках, является необязательным (т.е. если Вам надо - то можете указать, а если не укажете - будут использоваться какие-то разумные умолчания). Но сами квадратные скобки там явно не нужны.
СМС из CLI у меня приходят на телефон, т.е. в скрипте все исправил
Но я заранее предполагаю, что в заббиксе будет настроен текст уведомления "Нет связи с сервером" в этом сообщении три пробела.
И когда из CLI запускаю скрипт с текстом test test, то во входящем смс только одно слово test, второго нет. С этим и вопрос, почему второе слово test не вошло в текст сообщенияComment
-
Попробуйте запустить не, аCode:./script test test
. То есть обернуть "строку с пробелами" в одинарные (ну можно и двойные, в зависимости от вашего шелла) кавычкиCode:./script 'test test'
Comment
-
Потому что Ваш скрипт обрабатывает только два параметра: номер телефона и текст сообщения. А когда Вы вызываете скрипт так:то передаёте ему не два, а три параметра.Code:ИмяСкрипта НомерТелефона test test
Чтобы передать одним параметром несколько слов, разделённых пробелами, надо при вызове скрипта окружать их кавычками:
Code:ИмяСкрипта НомерТелефона "test1 test2 test3"
Comment
-
А еще неплохо бы научиться таким заклинаниям: https://yandex.ru/search/?text=curl%...B5%D0%BB&lr=19Comment
-
Да, вроде бы, там в скрипте это делает как раз 4-я строка. Заменяет пробелы из второго параметра на "%20".А еще неплохо бы научиться таким заклинаниям: https://yandex.ru/search/?text=curl%...b5%d0%bb&lr=19Comment
-
КомандаПотому что Ваш скрипт обрабатывает только два параметра: номер телефона и текст сообщения. А когда Вы вызываете скрипт так:то передаёте ему не два, а три параметра.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
-
Логично. Вы убрали преобразование пробелов, о котором я упоминал в предыдущем своём сообщении. В результате пытаетесь засовывать эти пробелы прямо в URL, передаваемый cURL-у. А в URL-ах пробелы недопустимы, поэтому и получаете 400 Bad request в ответ.
А ещё на этом форуме можно использовать форматирование текста: вставлять цитаты, помечать текст как код (тогда он отображается моноширинным шрифтом без другого форматирования) и т.п. Сильно облегчает восприятие.Last edited by Kos; 14-07-2017, 12:12.Comment
Comment