Мендель Купер - Искусство программирования на языке сценариев командной оболочки

Тут можно читать онлайн Мендель Купер - Искусство программирования на языке сценариев командной оболочки - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Искусство программирования на языке сценариев командной оболочки
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3.7/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Мендель Купер - Искусство программирования на языке сценариев командной оболочки краткое содержание

Искусство программирования на языке сценариев командной оболочки - описание и краткое содержание, автор Мендель Купер, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Данное руководство не предполагает наличие у читателя познаний в области программирования на языке сценариев, однако, быстро восполняет этот недостаток, постепенно, шаг за шагом раскрывая мудрость и красоту UNIX. Это руководство может рассматриваться как учебник, предназначенный для самостоятельного изучения или как справочник по программированию на shell. Руководство снабжено серией хорошо прокомментированных примеров, поскольку лучший путь к изучению языка сценариев -- это написание сценариев.

Искусство программирования на языке сценариев командной оболочки - читать онлайн бесплатно полную версию (весь текст целиком)

Искусство программирования на языке сценариев командной оболочки - читать книгу онлайн бесплатно, автор Мендель Купер
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

echo

echo "Второе число: "

read second

echo

retval=`sum_and_product $first $second` # Получить результат.

sum=`echo "$retval" | awk '{print $1}'` # Первое значение (поле).

product=`echo "$retval" | awk '{print $2}'` # Второе значение (поле).

echo "$first + $second = $sum"

echo "$first * $second = $product"

echo

exit 0

Следующая хитрость -- передача массива в функцию, и "возврат" массива из функции.

Передача массива в функцию выполняется посредством записи элементов массива, разделенных пробелами, в переменную, с помощью операции подстановки команды. Получить массив обратно можно, следуя вышеописанной стратегии, через вывод на stdout, а затем, с помощью все той же операции подстановки команды и оператора ( ... )-- записать в массив.

Пример 33-12. Передача массива в функцию и возврат массива из функции

#!/bin/bash

# array-function.sh: Передача массива в функцию и...

# "возврат" массива из функции

Pass_Array ()

{

local passed_array # Локальная переменная.

passed_array=( `echo "$1"` )

echo "${passed_array[@]}"

# Список всех элементов в новом массиве,

#+ объявленном и инициализированном в функции.

}

original_array=( element1 element2 element3 element4 element5 )

echo

echo "original_array = ${original_array[@]}"

# Список всех элементов исходного массива.

# Так можно отдать массив в функцию.

# **********************************

argument=`echo ${original_array[@]}`

# **********************************

# Поместив все элементы массива в переменную,

#+ разделяя их пробелами.

#

# Обратите внимание: метод прямой передачи массива в функцию не сработает.

# Так можно получить массив из функции.

# *****************************************

returned_array=( `Pass_Array "$argument"` )

# *****************************************

# Записать результат в переменную-массив.

echo "returned_array = ${returned_array[@]}"

echo "============================================================="

# А теперь попробуйте получить доступ к локальному массиву

#+ за пределами функции.

Pass_Array "$argument"

# Функция выведет массив, но...

#+ доступ к локальному массиву, за пределами функции, окажется невозможен.

echo "Результирующий массив (внутри функции) = ${passed_array[@]}"

# "ПУСТОЕ" ЗНАЧЕНИЕ, поскольку это локальная переменная.

echo

exit 0

Более сложный пример передачи массивов в функции, вы найдете в Пример A-11.

Использование конструкций с двойными круглыми скобками позволяет применять C-подобный синтаксис операций присвоения и инкремента переменных, а также оформления циклов for и while. См. Пример 10-12 и Пример 10-17.

Иногда очень удобно "пропускать" данные через один и тот же фильтр, но с разными параметрами, используя конвейерную обработку. Особенно это относится к tr и grep.

# Из примера "wstrings.sh".

wlist=`strings "$1" | tr A-Z a-z | tr '[:space:]' Z | \

tr -cs '[:alpha:]' Z | tr -s '\173-\377' Z | tr Z ' '`

Пример 33-13. Игры с анаграммами

#!/bin/bash

# agram.sh: Игры с анаграммами.

# Поиск анаграмм...

LETTERSET=etaoinshrdlu

anagram "$LETTERSET" | # Найти все анаграммы в наборе символов...

grep '.......' | # состоящие, как минимум из 7 символов,

grep '^is' | # начинающиеся с 'is'

grep -v 's$' | # исключая множественное число

grep -v 'ed$' # и глаголы в прошедшем времени

# Здесь используется утилита "anagram"

#+ которая входит в состав пакета "yawl" , разработанного автором.

# http://ibiblio.org/pub/Linux/libs/yawl-0.2.tar.gz

exit 0 # Конец.

bash$ sh agram.sh

islander

isolate

isolead

isotheral

См. также Пример 27-2, Пример 12-18 и Пример A-10.

Для создания блочных комментариев можно использовать "анонимные встроенные документы". См. Пример 17-10.

Попытка вызова утилиты из сценария на машине, где эта утилита отсутствует, потенциально опасна. Для обхода подобных проблем можно воспользоваться утилитой whatis.

CMD=command1 # Основной вариант.

PlanB=command2 # Запасной вариант.

command_test=$(whatis "$CMD" | grep 'nothing appropriate')

# Если 'command1' не найдена в системе, то 'whatis' вернет

#+ "command1: nothing appropriate."

#==> От переводчика: Будьте внимательны! Если у вас локализованная версия whatis

#==> то вывод от нее может отличаться от используемого здесь ('nothing appropriate')

if [[ -z "$command_test" ]] # Проверка наличия утилиты в системе.

then

$CMD option1 option2 # Запуск команды с параметрами.

else # Иначе,

$PlanB #+ запустить command2 (запасной вариант).

fi

Команда run-parts удобна для запуска нескольких сценариев, особенно в комбинации с cron или at.

Было бы неплохо снабдить сценарий графическим интерфейстом X-Window. Для этого можно порекомендовать пакеты Xscript , Xmenu и widtools . Правда, первые два, кажется больше не поддерживаются разработчиками. Зато widtools можно получить здесь.

Пакет widtools (widget tools) требует наличия библиотеки XForms . Кроме того, необходимо слегка подправить Makefile, чтобы этот пакет можно было собрать на типичной Linux-системе. Но хуже всего то, что три из шести виджетов не работают :-(( (segfault).

Для постороения приложений с графическим интерфейсом, можно попробовать Tk , или wish (надстройка над Tcl ), PerlTk (Perl с поддержкой Tk), tksh (ksh с поддержкой Tk), XForms4Perl (Perl с поддержкой XForms), Gtk-Perl (Perl с поддержкой Gtk) или PyQt (Python с поддержкой Qt).

33.8. Проблемы безопасности

Уместным будет лишний раз предупредить о соблюдении мер предосторожности при работе с незнакомыми сценариями. Сценарий может содержать червя , трояна или даже вирус . Если вы получили сценарий не из источника, которому доверяете, то никогда не запускайте его с привилегиями root и не позволяйте вставлять его в список сценариев начальной инициализации системы в /etc/rc.d, пока не убедитесь в том, что он безвреден для системы.

Исследователи из Bell Labs и других организаций, включая M. Douglas McIlroy, Tom Duff, и Fred Cohen исследовали вопрос о возможности создания вирусов на языке сценариев командной оболочки, и пришли к выводу, что это делается очень легко и доступно даже для новичков. [ 63 ] См. статью Marius van Oers, Unix Shell Scripting Malware, а также ссылку на Denning в разделе Литература.

Это еще одна из причин, по которым следует изучать язык командной оболочки. Способность читать и понимать сценарии поможет вам предотвратить возможность взлома и/или разрушения вашей системы.

33.9. Проблемы переносимости

Эта книга делает упор на создании сценариев для командной оболочки Bash, для операционной системы GNU/Linux. Тем не менее, многие рекомендации, приводимые здесь, могут быть вполне применимы и для других командных оболочек, таких как shи ksh.

Многие версии командных оболочек стремятся следовать стандарту POSIX 1003.2. Вызывая Bash с ключом --posix, или вставляя set -o posixв начало сценария, вы можете заставить Bash очень близко следовать этому стандарту. Но, даже без этого ключа, большинство сценариев, написанных для Bash, будут работать под управлением ksh, и наоборот, т.к. Chet Ramey перенес многие особенности, присущие ksh, в последние версии Bash.

В коммерческих версиях UNIX, сценарии, использующие GNU-версии стандартных утилит и команд, могут оказаться неработоспособными. Однако, с течением времени, таких проблем остается все меньше и меньше, поскольку утилиты GNU, в большинстве своем, заместили свои проприетарные аналоги в UNIX. После того, как Caldera дала разрешение на публикацию исходного кода некоторых версий оригинальных утилит UNIX, этот процесс значительно ускорился.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Мендель Купер читать все книги автора по порядку

Мендель Купер - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Искусство программирования на языке сценариев командной оболочки отзывы


Отзывы читателей о книге Искусство программирования на языке сценариев командной оболочки, автор: Мендель Купер. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x