sh скрипт

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
bars
Сообщения: 559
ОС: BSD/LINUX

sh скрипт

Сообщение bars »

Привет.
Подскажите еcть простенький скрипт мониторинга сроке действия доменов.
Доменов много, хочется отправлять на мыло уведомление.

Код: Выделить всё

for f in $DOMAIN
do
        echo -n "$f - " && whois $f | egrep 'Expiry Date' | awk '{print $4}' | sed 's/T[0-9][0-9]\:[0-9][0-9]\:[0-9][0-9]Z/ /g;'
done
Предполагаю, нужно создать буфер переменную в которую с цикла будет добавляться домены по условию и в конце отправка данных на мыло с этой переменной.
Хочется условия универсального и для bash и для sh/csh.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18981
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: sh скрипт

Сообщение Bizdelnick »

bars писал:
14.11.2021 19:08
Хочется условия универсального и для bash и для sh/csh.
Вообще-то csh с sh и bash мало общего имеет, зачем такие сложности? Используйте /bin/sh, если хотите универсальности.
И, кстати, учтите, что в whois формат данных не стандартизирован, так что и слов "Expiry Date" может не быть, и, тем более, формат даты может отличаться у разных регистраторов.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
bars
Сообщения: 559
ОС: BSD/LINUX

Re: sh скрипт

Сообщение bars »

Bizdelnick писал:
14.11.2021 19:27
Вообще-то csh с sh и bash мало общего имеет, зачем такие сложности? Используйте /bin/sh, если хотите универсальности.
И, кстати, учтите, что в whois формат данных не стандартизирован, так что и слов "Expiry Date" может не быть, и, тем более, формат даты может отличаться у разных регистраторов.
А как тогда мониторить срок действия доменов?
Старшие менеджеры проектов/владельцы доменов иногда забивают на отслеживания срока действия доменов.
Вот и решил подстраховаться.
Добавлено (19:41):
ru/su данные whois отличаются от com/net/org и т.д.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18981
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: sh скрипт

Сообщение Bizdelnick »

bars писал:
14.11.2021 19:38
А как тогда мониторить срок действия доменов?
Есть библиотеки, которые умеют парсить whois в разных форматах. Хотя 100% гарантии корректности и они, конечно, не дадут.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
bars
Сообщения: 559
ОС: BSD/LINUX

Re: sh скрипт

Сообщение bars »

Bizdelnick писал:
14.11.2021 19:41
Есть библиотеки, которые умеют парсить whois в разных форматах. Хотя 100% гарантии корректности и они, конечно, не дадут.
Пока остановлюсь на своем скрипте.
Так как можно поместить данные в буфер переменную и после ее разом отправить на почту?
Как отправить на почту я знаю, не знаю пока как определить переменную типа буфера для отправки разом.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18981
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: sh скрипт

Сообщение Bizdelnick »

Код: Выделить всё

VAR="$VAR
ещё одна строчка"
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 530
ОС: debian, fedora (i3-wm)

Re: sh скрипт

Сообщение olecya »

bars писал:
14.11.2021 19:44
Так как можно поместить данные в буфер переменную и после ее разом отправить на почту?
Зачем вам переменная?

Код: Выделить всё

done |& mail -s "report" user@yourmaildomain.com
Спасибо сказали:

Аватара пользователя
bars
Сообщения: 559
ОС: BSD/LINUX

Re: sh скрипт

Сообщение bars »

olecya писала:
14.11.2021 20:47
done |& mail -s "report" user@yourmaildomain.com
В таком случае получится куча писем, хочется одним письмом отправить подходящие по сроку домены.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 530
ОС: debian, fedora (i3-wm)

Re: sh скрипт

Сообщение olecya »

bars писал:
14.11.2021 20:52
В таком случае получится куча писем
А проверьте...
Все будет в одном письме
Добавлено (21:02):
На всякий случай уточню:

Код: Выделить всё

for f in $DOMAIN; do
    ...
done |& mutt -s "report" user@yourmaildomain.com
Я обычно mutt пользуюсь через релейный гугловский почтовый ящик
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18981
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: sh скрипт

Сообщение Bizdelnick »

olecya писала:
14.11.2021 20:55
Все будет в одном письме
Даже в том случае, если сообщать будет не о чем.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 530
ОС: debian, fedora (i3-wm)

Re: sh скрипт

Сообщение olecya »

Если конечно нужно сообщение если только вывод будет не пустым лучше использовать временный файл:

Код: Выделить всё

done >/tmp/temp

test -s /tmp/temp && cat /tmp/temp |
        mutt -s 'report_if_not_empty' user@mail
Спасибо сказали:

Аватара пользователя
bars
Сообщения: 559
ОС: BSD/LINUX

Re: sh скрипт

Сообщение bars »

olecya писала:
14.11.2021 22:14
Если конечно нужно сообщение если только вывод будет не пустым лучше использовать временный файл:
Я тоже подумываю складывать сперва в файл по условию, а после в конце скрипта отправлять данные из файла разом.
Застрял на доп. задаче.
Хочу получить предыдущий месяц и текущий месяц.

Код: Выделить всё

$ echo $(($(date +"%m")-1))\|$(date +"%m")
10|11
Но если применить с грепом то не работает.

Код: Выделить всё

$ sh sh/check_dom.sh | egrep '2021\-(10|11)\-'
dom.biz - 2021-11-20 
dom1.com - 2021-11-20 
dom.net - 2021-11-26
Пусто.

Код: Выделить всё

$ sh other/sh/check_dom.sh | egrep "2021\-(echo $(($(date +"%m")-1))\|$(date +"%m"))\-"
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:

Аватара пользователя
bars
Сообщения: 559
ОС: BSD/LINUX

Re: sh скрипт

Сообщение bars »

Пока сделал без отправки на почту.

Код: Выделить всё

#!/bin/sh
DOMAIN=`cat /home/domens.txt`
MOUNTH=`echo $(date --date="last month" +%m)\|$(date +"%m")`

for f in $DOMAIN
do
    dom=`echo -n "$f - " && whois $f | egrep 'Expiry Date' | awk '{print $4}' | sed 's/T[0-9][0-9]\:[0-9][0-9]\:[0-9][0-9]Z/ /g;'`
    echo $dom | egrep "2021\-($MOUNTH)\-" >> /tmp/dom_check.txt
done
exit 0
Думаю отправку на почту, не составит труда сделать.

Код: Выделить всё

cat /tmp/dom_check.txt | mail -s "Domain lease ends." my@mail.local
Но вот что не нравится, что формат data распознается в разных интерпретаторах по разному.
bash

Код: Выделить всё

echo $(date --date="last month" +%m)\|$(date +"%m")
echo $(($(date +"%m")-1))\|$(date +"%m")
sh/csh

Код: Выделить всё

echo `date -v-1m +%m`\|`date +"%m"`
Получаем в итоге 10|11, предыдущий и текущий месяц.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18981
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: sh скрипт

Сообщение Bizdelnick »

bars писал:
15.11.2021 09:03

Код: Выделить всё

$ sh other/sh/check_dom.sh | egrep "2021\-(echo $(($(date +"%m")-1))\|$(date +"%m"))\-"
echo уберите.
Добавлено (14:12):
bars писал:
15.11.2021 11:16
Но вот что не нравится, что формат data распознается в разных интерпретаторах по разному.
От интерпретатора он точно никак не зависит. Возможно, у Вас разные реализации date установлены, и запускается одна или другая в зависимости от содержимого $PATH.
И я так и не понял, зачем Вам поддержка csh? Он никогда, ни при какой погоде и ни в какой ОС не окажется на месте /bin/sh.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
bars
Сообщения: 559
ОС: BSD/LINUX

Re: sh скрипт

Сообщение bars »

Bizdelnick писал:
15.11.2021 13:57
echo уберите.
Ага, спасибо эхо тут лишнее.
Добавлено (15:58):
Bizdelnick писал:
15.11.2021 13:57
И я так и не понял, зачем Вам поддержка csh? Он никогда, ни при какой погоде и ни в какой ОС не окажется на месте /bin/sh.
Не понял.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18981
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: sh скрипт

Сообщение Bizdelnick »

bars писал:
15.11.2021 15:57
Не понял.
У Вас в шебанге /bin/sh. Причём тут csh?
Добавлено (16:09):
BTW считывать весь список доменов в переменную нет никакой нужды, можно сделать

Код: Выделить всё

while read dn; do
  # тело цикла
done < /home/domens.txt
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
bars
Сообщения: 559
ОС: BSD/LINUX

Re: sh скрипт

Сообщение bars »

Bizdelnick писал:
15.11.2021 16:06
У Вас в шебанге /bin/sh. Причём тут csh?
не причем, перепутал.
:rolleyes:
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:

Аватара пользователя
bars
Сообщения: 559
ОС: BSD/LINUX

Re: sh скрипт

Сообщение bars »

Bizdelnick писал:
15.11.2021 16:06
BTW считывать весь список доменов в переменную нет никакой нужды, можно сделать
Хмм, особо разницы я не заметил.
Но все равно спасибо за уделенное время.

Код: Выделить всё

#!/bin/sh
MOUNTH=$(date --date="last month" +%m)\|$(date +"%m")
while read f; do
    dom=`echo -n "$f - " && whois $f | egrep 'Expiry Date' | awk '{print $4}' | sed 's/T[0-9][0-9]\:[0-9][0-9]\:[0-9][0-9]Z/ /g;'`
    echo $dom | egrep "2021\-($MOUNTH)\-" >> /tmp/dom_check.txt
done < /home/bars/domens.txt
exit 0
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18981
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: sh скрипт

Сообщение Bizdelnick »

bars писал:
14.11.2021 19:38
ru/su данные whois отличаются от com/net/org и т.д.
Не только они. См., например, https://www.nic.ru/help/opisanie-polej-whois-servisa_3593.html
И это далеко не все варианты. Можете посмотреть, как сделано тут и тут.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 530
ОС: debian, fedora (i3-wm)

Re: sh скрипт

Сообщение olecya »

bars писал:
15.11.2021 17:32

Код: Выделить всё

| egrep 'Expiry Date' | awk '{print $4}' | sed 's/T[0-9][0-9]\:[0-9][0-9]\:[0-9][0-9]Z/ /g;'
Глаза режет в одной строчке и egrep и sed и awk, одной командой:

Код: Выделить всё

| awk '/Expiry Date/ {gsub(/T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]Z/, " ", $4); print $4}'
Спасибо сказали:

Аватара пользователя
bars
Сообщения: 559
ОС: BSD/LINUX

Re: sh скрипт

Сообщение bars »

Bizdelnick писал:
15.11.2021 18:39
И это далеко не все варианты. Можете посмотреть, как сделано тут и тут.
Пока достаточно текущего скрипта, зон не так уже и много, ( com/net/org/biz/club/ru/su ).
Добавлено (18:50):
olecya писала:
15.11.2021 18:49
Глаза режет в одной строчке и egrep и sed и awk, одной командой:
)
Спасибо, сейчас попробую.
Я сам сторонник минимализма.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4784
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: sh скрипт

Сообщение SLEDopit »

bars писал:
15.11.2021 17:32
egrep 'Expiry Date'
первый пришедший в голову домен сразу не сработает:

Код: Выделить всё

$ whois ya.ru
% By submitting a query to RIPN's Whois Service
% you agree to abide by the following terms of use:
% http://www.ripn.net/about/servpol.html#3.2 (in Russian) 
% http://www.ripn.net/about/en/servpol.html#3.2 (in English).

domain:        YA.RU
nserver:       ns1.yandex.ru.
nserver:       ns2.yandex.ru.
state:         REGISTERED, DELEGATED, VERIFIED
org:           YANDEX, LLC.
registrar:     RU-CENTER-RU
admin-contact: https://www.nic.ru/whois
created:       1999-07-12T14:40:22Z
paid-till:     2022-07-31T21:00:00Z
free-date:     2022-09-01
source:        TCI
А вообще это тот случай, когда я бы предпочел обратиться к какому питону с его python-whois, чем тратить время на своё решение. А если используется мониторинг где, то и вовсе туда повесил. prometheus норм умеет за такими штуками следить.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:

Аватара пользователя
bars
Сообщения: 559
ОС: BSD/LINUX

Re: sh скрипт

Сообщение bars »

Я же чуть выше написал, что ru/su отличается выдача вхоиз от net/org/com.
У меня два цикла создана и два списка.
Мне самому просто интересно, так то мне пофиг на срок действия доменов, это работа старших менеджеров/владельцев отслеживать период оплаты доменов.

Код: Выделить всё

for r in $DOMAIN_RU
do
    dom_ru=`echo -n "$r - " && whois $r | awk '/paid-till/ {gsub(/T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]Z/, " ", $2); print $2}'`
    echo $dom_ru | egrep "2021\-($MOUNTH)\-" >> /tmp/dom_check.txt
done
Добавлено (20:16):
Можно чуть сократить команду выборки.

Код: Выделить всё

awk '/paid-till/ {gsub(/T.*Z/, " ", $2); print $2}'
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали: