Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - [15]
Все проверки выполнились успешно? Тогда сценарий возвращает 0, указывающий, что ввод пользователя содержит допустимое вещественное число.
Запуск сценария
Если во время выполнения функции не будет выведено сообщения об ошибке, она вернет 0 для числа, являющегося допустимым вещественным значением. Чтобы протестировать сценарий, добавьте в конец следующие строки кода:
>if validfloat $1; then
>··echo "$1 is a valid floating-point value."
>fi
>exit 0
Если попытка подключить сценарий validint сгенерирует ошибку, убедитесь, что он находится в одном из каталогов, перечисленных в PATH, или просто скопируйте функцию validint непосредственно в начало сценария validfloat.
Результаты
Сценарий validfloat принимает единственный аргумент для проверки. Листинг 1.13 демонстрирует проверку нескольких значений с помощью validfloat.
Листинг 1.13. Тестирование сценария validfloat
>$ validfloat 1234.56
>1234.56 is a valid floating-point value.
>$ validfloat -1234.56
>-1234.56 is a valid floating-point value.
>$ validfloat —.75
>-.75 is a valid floating-point value.
>$ validfloat -11.-12
>Invalid floating-point number: '-' not allowed after decimal point.
>$ validfloat 1.0344e22
>Invalid number format! Only digits, no commas, spaces, etc.
Если вы увидите лишний вывод, это может объясняться присутствием строк, добавленных ранее в validint для тестирования, которые вы забыли удалить перед переходом к этому сценарию. Просто вернитесь назад, к описанию сценария № 5 и закомментируйте или удалите строки, добавленные для тестирования функции.
Усовершенствование сценария
Было бы круто добавить в функцию поддержку научной формы записи, продемонстрированной в последнем примере. Это не так уж трудно. Вам нужно проверить присутствие в числе символа 'e’ или 'E’ и затем разбить его на три сегмента: целую часть (всегда представлена единственной цифрой), дробную часть и степень числа 10. После этого каждую часть можно проверить с помощью validint.
№ 7. Проверка форматов дат
Одна из наиболее сложных, но очень важная команда проверки — это проверка допустимости дат. Если не принимать в расчет високосные годы, задача не кажется особенно трудной, потому что каждый год календарь остается неизменным. В данном случае достаточно иметь таблицу с числом дней в месяцах и использовать ее для проверки каждой конкретной даты. Чтобы учесть високосные годы, нужно добавить в сценарий дополнительную логику, и именно этот аспект вызывает наибольшие сложности.
Ниже приводится набор критериев, проверка которых позволяет сказать, является ли проверяемый год високосным:
• Если год не кратен 4, он не високосный.
• Если год делится на 4 и на 400 — это високосный год.
• Если год делится на 4 и не делится на 400, но делится на 100 — это не високосный год.
• Все остальные годы, кратные 4, являются високосными.
Просматривая исходный код в листинге 1.14, обратите внимание, что для нормализации исходной даты перед проверкой этот сценарий использует normdate.
Код
Листинг 1.14. Сценарий valid-date
>··#!/bin/bash
>··# valid-date — Проверяет дату с учетом правил определения високосных лет
>··normdate="укажите здесь имя файла, в котором вы сохранили сценарий normdate.sh"
>··exceedsDaysInMonth()
>··{
>····# С учетом названия месяца и числа дней в этом месяце, данная функция
>····# вернет: 0, если указанное число меньше или равно числу дней в месяце;
>····# 1 — в противном случае.
>····case $(echo $1|tr '[: upper: ]' '[: lower: ]') in
>······jan*) days=31;; feb*) days=28;;
>······mar*) days=31;; apr*) days=30;;
>······may*) days=31;; jun*) days=30;;
>······jul*) days=31;; aug*) days=31;;
>······sep*) days=30;; oct*) days=31;;
>······nov*) days=30;; dec*) days=31;;
>········*) echo "$0: Unknown month name $1" >&2
>············exit 1
>····esac
>····if [$2 −lt 1 −o $2 −gt $days]; then
>······return 1
>····else
>······return 0 # Число месяца допустимо.
>····fi
>··}
>··isLeapYear()
>··{
>····# Эта функция возвращает 0, если указанный год является високосным;
>····#·· иначе возвращается 1.
>····# Правила проверки високосного года:
>····#·· 1. Если год не делится на 4, значит, он не високосный.
>····#·· 2. Если год делится на 4 и на 400, значит, он високосный.
>····#·· 3. Если год делится на 4, не делится на 400 и делится
>····#······на 100, значит, он не високосный.
>····#·· 4. Любой другой год, который делится на 4, является високосным.
>····year=$1
>····if ["$((year % 4))" −ne 0]; then
>······return 1 # Nope, not a leap year.
>····elif ["$((year % 400))" −eq 0]; then
>······return 0 # Yes, it's a leap year.
>····elif ["$((year % 100))" −eq 0]; then
>······return 1
>····else
>······return 0
>····fi
>··}
>··# Начало основного сценария
>··# =================
>··if [$# −ne 3]; then
>····echo "Usage: $0 month day year" >&2
>····echo "Typical input formats are August 3 1962 and 8 3 1962" >&2
>····exit 1
>··fi
>··# Нормализовать дату и сохранить для проверки на ошибки.
>··newdate="$($normdate "$@")"
>··if [$? -eq 1]; then
>····exit 1 # Error condition already reported by normdate
>··fi
>··# Разбить нормализованную дату, в которой
>··#·· первое слово = месяц, второе слово = число месяца
>··#·· третье слово = год.
>··month="$(echo $newdate | cut −d\ −f1)"
>··day="$(echo $newdate | cut −d\ −f2)"
Применение виртуальных машин дает различным категориям пользователей — от начинающих до IT-специалистов — множество преимуществ. Это и повышенная безопасность работы, и простота развертывания новых платформ, и снижение стоимости владения. И потому не случайно сегодня виртуальные машины переживают второе рождение.В книге рассмотрены три наиболее популярных на сегодняшний день инструмента, предназначенных для создания виртуальных машин и управления ими: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels.
Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows.
Реестр Windows является важной частью операционной системы, во многом определяющей ее работу. Изучив приведенный в этой книге материал, вы научитесь редактировать реестр Windows Vista по своему усмотрению, а также освоите многочисленные приемы оптимизации содержащихся в нем настроек операционной системы.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Iptables Tutorial 1.1.19Автор: (C) Oskar AndreassonCopyright (C) 2001-2002 by Oskar AndreassonПеревод: (C) Андрей КиселевПоследнюю версию документа можно получить по адресу: http://iptables-tutorial.frozentux.netfb2-документ отформатирован с использованием большого количества тегов и . Чтобы в «читалке» (в частности, Haali Reader) текст выглядел «красиво», настройте свойства соотвествующих стилей (emphasis и strong), изменив, например, их цвета или начертания. (прим. автора fb2-документа)
Курс лекций, включенных в брошюру, знакомит читателя с популярными свободными программами и системами, полезными при преподавании информатики в средней школе. В обзор вошли основы открытых операционных систем, сведения о пакете «офисных» программ OpenOffice.org, коммуникационном пакете Mozilla, графическом редакторе GIMP, современных графических средах GNOME и KDE и других программах.Для преподавателей информатики и методистов, а также для студентов и аспирантов соответствующих специальностей.© 2002-3, Максим Отставнов.© 2002, Андрей Добровольский (раздел 3.1).Использован текст лекций, публиковавшихся автором в приложении к газете «Первое сентября» «Информатика» (http://inf.1september.ru) в 2002-3 г., материалы брошюры «Прикладные свободные программы в школе» (М.: 2003 г.), а также фрагменты статей, ранее публиковавшихся в журналах «Компьютерра» и «Домашний компьютер».Материалы, представленные в этой книге, также доступны в Интернет на странице www.otstavnov.com/fsft на условиях Свободной лицензии ГНУ на документацию (GNU FDL)