В этом примере я пытаюсь дать более яркую концепцию того, что происходит. Немного управляйте сценарием и получите нужный результат.
#!/bin/bash
obtain_level=$(gammu monitor | awk '/Battery level/{print $4}')
if (( obtain_level <= 25 ))
then
echo "less than 25"
elif (( obtain_level >= 26 || obtain_level <= 50 ))
then
echo "between 25 and 50"
else
echo "good"
fi
-121--290818- На компьютере с сервером приложений:
Перед запуском приложения:
iptables -I INPUT -d <app server ip> --dport <app server port> -j REJECT
После завершения запуска:
iptables -D INPUT -d <app server ip> --dport <app server port> -j REJECT
При необходимости можно перенаправить трафик на другой сервер, на котором будет указано «приложение загружается». В этом случае замените:
-j REJECT
на
-j DNAT --to-destination < ip-адрес другой машины >
в обеих командах. Обратите внимание, что в этом случае необходимо включить функцию IP Forwarding. Необходимо настроить:
net.ipv4.ip _ forward = 1
в /etc/sysctl.conf
Это вступит в силу при следующей загрузке. Для немедленного применения в запущенной системе:
echo 1 >/ proc/sys/net/ipv4/ip_forward
You также может потребоваться маскировка трафика, уходящего от сервера приложений к серверу, чтобы показаться принимающему серверу исходящим от него (т.е. перезаписать IP-адрес источника). Вы можете сделать это с помощью:
iptables -t nat -I POSTROUTING -o < трафик интерфейса выйдет > -j MASQUERADE
Другой вариант: если у вас есть другой сервер на том же компьютере, что и сервер приложений, на другом порту, который может отображать страницу «приложение загружается», вы можете перенаправить трафик на этот порт. Та же идея, только вместо REJECT/DNAT:
ПЕРЕНАПРАВЛЕНИЕ-j - к порту <другой номер порта локального сервера>
Этот выбор не требует преобразования вашего сервера приложения в маршрутизатор:) (ip_forward не требуемый)
Когда вы заключаете раскрытие переменной в одинарные кавычки, вы не даете оболочке раскрыть эту переменную. Вместо этого вы должны использовать двойные кавычки.
Вот предложение по улучшению:
#!/bin/sh
while getopts "a:" option; do
case $option in
a) word=$OPTARG ;;
*) echo 'error' >&2
exit 1
esac
done
if [ -z "$word" ]; then
echo 'Missing word to search for' >&2
exit 1
fi
printf 'Searching for "%s"\n' "$word"
grep -o "$word.*".addr_book
Я внес несколько изменений:
ksh
-специфические функции, поэтому я сделал его /bin/sh
скриптом. grep
). Это упрощает поддержку скрипта. :
в строке getopts
говорит getopts
, что вы сами будете обрабатывать неверный аргумент командной строки. Это редко требуется, так как диагностические сообщения от getopts
часто адекватны. >&2
). printf
. cat
был удален.