Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Название:Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Автор:
- Жанр:
- Издательство:Питер
- Год:2017
- Город:СПб.
- ISBN:978-5-496-03029-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Запуск сценария
Сценарий спроектирован так, что им очень легко пользоваться, как можно заметить в листинге 7.17, однако знание валют хотя бы нескольких стран лишним не будет.
Результаты
Листинг 7.17.Запуск сценария convertcurrency
$ convertcurrency
Usage: convert amount currency to currency
Most common currencies are CAD, CNY, EUR, USD, INR, JPY, and MXN
Use "convertcurrency list" for a list of supported currencies.
$ convertcurrency list | head -10
List of supported currencies:
AED United Arab Emirates Dirham
AFN Afghan Afghani
ALL Albanian Lek
AMD Armenian Dram
ANG Netherlands Antillean Guilder
AOA Angolan Kwanza
ARS Argentine Peso
AUD Australian Dollar
AWG Aruban Florin
$ convertcurrency 75 eur to usd
75 EUR = 84.5132 USD
Усовершенствование сценария
Несмотря на строгость и простоту веб-калькулятора, в вывод результатов все же можно добавить немного порядка. Например, вывод результатов пересчета в листинге 7.17 лишен смысла, поскольку сумма в долларах США в нем выражена числом с четырьмя знаками после запятой, даже при том, что для отображения количества центов достаточно двух знаков. Правильнее было бы вывести 84,51 или округлить до 84,52. Эту ошибку в сценарии желательно исправить.
И еще, пока вы не отвлеклись, хорошо бы добавить в сценарий проверку сокращенных обозначений валют. Пригодилось бы и преобразование кодов валют в полные названия, например, чтобы можно было выяснить, что AWG — это арубанские флорины или что BTC — это Bitcoin (Биткоин).
№ 61. Извлечение информации об адресе Биткоин
Система Биткоин (Bitcoin) вихрем ворвалась в наш мир, и даже появились компании, полностью основанные на цепочках блоков (blockchain, базовой технологии, на которой основана эта криптовалюта). Для тех, кому приходится работать с данной системой, получение полезной информации о конкретном адресе Биткоин нередко становится главной проблемой. Однако мы легко можем автоматизировать сбор данных с использованием короткого сценария на языке командной оболочки, представленного в листинге 7.18.
Код
Листинг 7.18.Сценарий getbtcaddr
#!/bin/bash
# getbtcaddr — получая адрес Биткоин, возвращает полезную информацию.
if [$# −ne 1]; then
··echo "Usage: $0
"
··exit 1
fi
base_url="https://blockchain.info/q/"
balance=$(curl −s $base_url" addressbalance/"$1)
recv=$(curl −s $base_url" getreceivedbyaddress/"$1)
sent=$(curl −s $base_url" getsentbyaddress/"$1)
first_made=$(curl −s $base_url" addressfirstseen/"$1)
echo "Details for address $1"
echo −e "\tFirst seen: "$(date −d @$first_made)
echo −e "\tCurrent balance: "$balance
echo −e "\tSatoshis sent: "$sent
echo −e "\tSatoshis recv: "$recv
Как это работает
Сценарий несколько раз вызывает команду curl, чтобы извлечь ценные сведения из заданного адреса Биткоин. Соответствующая служба, доступная по адресу: http://blockchain.info/, дает простую возможность получить полную информацию об адресе Биткоин и цепочке блоков. Фактически, нам даже не потребовалось анализировать информацию, получаемую от службы, потому что она возвращает простые одиночные значения. Получив баланс для заданного адреса, сведения о количестве полученных и потраченных монет и о том, когда осуществлялись платежи, сценарий выводит эту информацию на экран.
Запуск сценария
Сценарий принимает единственный аргумент — адрес Биткоин, информацию о котором требуется получить. Следует отметить, что, если передать сценарию строку, не являющуюся действительным адресом Биткоин, он выведет нули в строках, сообщающих о балансе и полученных и потраченных суммах, а в качестве даты создания будет указан 1969 год. Любые ненулевые суммы указываются в сатоши ( satoshi ) [6] Биткоин = 100 000 000 сатоши. — Примеч. пер.
— минимальных единицах обозначения сумм в Биткоин (как, например, пенни, но с намного большим количеством знаков после запятой).
Результаты
Пользоваться сценарием getbtcaddr очень просто, как показано в листинге 7.19, так как он принимает единственный аргумент, адрес Биткоин, информацию о котором требуется получить.
Листинг 7.19.Запуск сценария getbtcaddr
$ getbtcaddr 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
Details for address 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
····First seen: Sat Jan 3 12:15:05 CST 2009
····Current balance: 6554034549
····Satoshis sent: 0
····Satoshis recv: 6554034549
$ getbtcaddr 1EzwoHtiXB4iFwedPr49iywjZn2nnekhoj
Details for address 1EzwoHtiXB4iFwedPr49iywjZn2nnekhoj
····First seen: Sun Mar 11 11:11:41 CDT 2012
····Current balance: 2000000
····Satoshis sent: 716369585974
····Satoshis recv: 716371585974
Усовершенствование сценария
Сценарий по умолчанию выводит очень большие числа, которые трудно прочитать. Чтобы отобразить данные в единицах, более простых для восприятия (например, в целых Биткоинах), можно использовать сценарий scriptbc (сценарий № 9 в главе 1). Поддержка аргумента точности позволила бы выводить данные в удобочитаемом формате.
№ 62. Определение изменений в веб-страницах
Иногда, просматривая существующие решения, мы с воодушевлением говорим себе: «Оказывается, это совсем несложно». Слежение за изменениями на веб-сайтах — удивительно простой способ собирать такие воодушевляющие образцы. Сценарий в листинге 7.20, changetrack, автоматизирует эту задачу. Данный сценарий имеет одну интересную особенность: обнаружив изменения на сайте, он не просто выводит уведомление в командной строке, а посылает пользователю новую веб-страницу по электронной почте.
Код
Листинг 7.20.Сценарий changetrack
#!/bin/bash
# changetrack — проверяет страницу по указанному URL и, если она
#·· изменилась с момента последнего посещения, посылает новую страницу
#····по указанному адресу электронной почты.
sendmail=$(which sendmail)
sitearchive="/tmp/changetrack"
tmpchanges="$sitearchive/changes.$$" # Временный файл
fromaddr="webscraper@intuitive.com"
dirperm=755······ # чтение+запись+выполнение для владельца каталога
fileperm=644······# чтение+запись для владельца, только чтение для других
trap "$(which rm) −f $tmpchanges" 0 1 15 # Удалить временный файл при выходе.
if [$# −ne 2]; then
··echo "Usage: $(basename $0) url email" >&2
··echo " tip: to have changes displayed on screen, use email addr '-'" >&2
··exit 1
fi
if [! -d $sitearchive]; then
··if! mkdir $sitearchive; then
····echo "$(basename $0) failed: couldn't create $sitearchive." >&2
····exit 1
··fi
··chmod $dirperm $sitearchive
fi
if ["$(echo $1 | cut −c1-5)"!= "http: "]; then
··echo "Please use fully qualified URLs (e.g. start with 'http://')" >&2
··exit 1
fi
fname="$(echo $1 | sed 's/http: \/\///g' | tr '/?&' '…')"
baseurl="$(echo $1 | cut −d/ −f1-3)/"
# Загрузить копию веб-страницы и поместить в файл архива. Обратите
Интервал:
Закладка: