Кто в офисе?
Побывал сегодня на работе и, в перерыве между делами, написал небольшой скрипт на bash. В общем-то, для широкой публики результат его работы бесполезен, зато он является иллюстрацией как можно работать на bash с сокетами, я давно хотел попробовать.
На оптимальность решений не претендую, конечно, всё равно основное время работы — это ожидание данных из сокета.
# Кто сегодня в офисе?
# private data vars
WAPIHOST='██████.██████-████.██'
SAPIHOST='█████.██████.██'
SAPI='/█████/██████.xhtml?██████████=█&█████_██=██'
# non-private data vars
WAPI='/where/%s'
NOW=$(date +%s)
function whereAreYou {
exec 3<>/dev/tcp/$WAPIHOST/80
echo -e "GET ${WAPI/\%s/$1} HTTP/1.0\nHost: $WAPIHOST\n\n" >&3
local DATA=$(grep -E '^.?$' -A1 <&3)
if [[ ! $DATA =~ 'VPN' && $DATA =~ 'updated_at' ]]; then
local date=$(echo $DATA | sed -E 's/^.*updated_at"[^"]+"([^"]+).+/\1/' | xargs -Io date -d'o' +%s)
if [ $(($NOW-$date)) -le 3600 ]; then
echo "$1 - $(date -d@$date +%k:%M)"
fi
fi
}
exec 4<>/dev/tcp/$SAPIHOST/80
echo -e "GET $SAPI HTTP/1.0\nHost: $SAPIHOST\n\n" >&4
while read -r line <&4; do
nick=$(echo $line | egrep -o "href='http://$SAPIHOST/\w+" | cut -b$((15+${#SAPIHOST}))-)
[ -n "$nick" ] && whereAreYou $nick
done
function whereAreYou {
exec 3<>/dev/tcp/$WAPIHOST/80
Платформозависимо. :(
Комментарий для анонимус:
Ну и что? :)
ну я уж порадовался что что-то новое о баше узнаю. у тут банальный I/O
кстати вполне вероятно curl бы больше подошел :)
Комментарий для анонимус:
Что ж поделать? :)
Все конструкции этого скрипта знакомы?
Комментарий для анонимус:
Тогда зачем вообще это писать на баше? Я хотел решить какую-то задачу, попробовав поработать с сокетами.
да
Комментарий для анонимус:
А можно было что-то проще сделать?
хз. вроде достаточно просто все.
зависит от характера того что там отдается по http.
не скажу как бы я делал.
Комментарий для анонимус:
JSON там.
А, например, sed и egrep/grep разве нельзя заменить на встроенные функции bash?
Комментарий для jankkhvej.blogspot.com:
Возможно. Мне так было проще. Можете предложить ваш вариант?