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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Таблица 30-1. Ключи Bash

Краткое имя Полное имя Описание
-C noclobber Предотвращает перезапись файла в операциях перенаправления вывода (не распространяется на конвейеры (каналы) -- >|)
-D (нет) Выводит список строк в двойных кавычках, которым предшествует символ $, сам сценарий не исполняется
-a allexport Экспорт всех, определенных в сценарии, переменных
-b notify Выводит уведомление по завершении фоновой задачи (job) (довольно редко используется в сценариях)
-c ... (нет) Читает команды из ...
-f noglob Подстановка имен файлов (globbing) запрещена
-i interactive Сценарий запускается в интерактивном режиме
-p privileged Сценарий запускается как "suid" (осторожно!)
-r restricted Сценарий запускается в ограниченном режиме (см. Глава 20).
-u nounset При попытке обращения к неопределенным переменным, выдает сообщение об ошибке и прерывает работу сценария
-v verbose Выводит на stdout каждую команду прежде, чем она будет исполнена
-x xtrace Подобна -v, но выполняет подстановку команд
-e errexit Прерывает работу сценария при появлении первой же ошибки (когда команда возвращает ненулевой код завершения)
-n noexec Читает команды из сценария, но не исполняет их (проверка синтаксиса)
-s stdin Читает команды с устройства stdin
-t (нет) Выход после исполнения первой команды
- (нет) Конец списка ключей (опций), последующие аргументы будут восприниматься как позиционные параметры.
-- (нет) Эквивалент предыдущей опции (-).

Глава 31. Широко распространенные ошибки

Turandot: Gli enigmi sono tre, la morte una!

Caleph: No, no! Gli enigmi sono tre, una la vita!

Puccini

Использование зарезервированных слов и служебных символов в качестве имен переменных.

case=value0 # Может вызвать проблемы.

23skidoo=value1 # Тоже самое.

# Имена переменных, начинающиеся с цифр, зарезервированы командной оболочкой.

# Если имя переменной начинается с символа подчеркивания: _23skidoo=value1, то это не считается ошибкой.

# Однако... если имя переменной состоит из единственного символа подчеркивания, то это ошибка.

_=25

echo $_ # $_ -- это внутренняя переменная.

xyz((!*=value2 # Вызывает серьезные проблемы.

Использование дефиса, и других зарезервированных символов, в именах переменных.

var-1=23

# Вместо такой записи используйте 'var_1'.

Использование одинаковых имен для переменных и функций. Это делает сценарий трудным для понимания.

do_something ()

{

echo "Эта функция должна что-нибудь сделать с \"$1\"."

}

do_something=do_something

do_something do_something

# Все это будет работать правильно, но слишком уж запутанно.

Использование лишних пробелов. В отличие от других языков программирования, Bash весьма привередлив по отношению к пробелам.

var1 = 23 # Правильный вариант: 'var1=23'.

# В вышеприведенной строке Bash будет трактовать "var1" как имя команды

# с аргументами "=" и "23".

let c = $a - $b # Правильный вариант: 'let c=$a-$b' или 'let "c = $a - $b"'

if [ $a -le 5] # Правильный вариант: if [ $a -le 5 ]

# if [ "$a" -le 5 ] еще лучше.

# [[ $a -le 5 ]] тоже верно.

Ошибочным является предположение о том, что неинициализированные переменные содержат "ноль". Неинициализированные переменные содержат "пустое" (null) значение, а не ноль.

#!/bin/bash

echo "uninitialized_var = $uninitialized_var"

# uninitialized_var =

Часто программисты путают операторы сравнения = и -eq . Запомните, оператор = используется для сравнения строковых переменных, а -eq -- для сравнения целых чисел.

if [ "$a" = 273 ] # Как вы полагаете? $a -- это целое число или строка?

if [ "$a" -eq 273 ] # Если $a -- целое число.

# Иногда, такого рода ошибка никак себя не проявляет.

# Однако...

a=273.0 # Не целое число.

if [ "$a" = 273 ]

then

echo "Равны."

else

echo "Не равны."

fi # Не равны.

# тоже самое и для a=" 273" и a="0273".

# Подобные проблемы возникают при использовании "-eq" со строковыми значениями.

if [ "$a" -eq 273.0 ]

then

echo "a = $a'

fi # Исполнение сценария прерывается по ошибке.

# test.sh: [: 273.0: integer expression expected

Ошибки при сравнении целых чисел и строковых значений.

#!/bin/bash

# bad-op.sh

number=1

while [ "$number" < 5 ] # Неверно! должно быть while [ "number" -lt 5 ]

do

echo -n "$number "

let "number += 1"

done

# Этот сценарий генерирует сообщение об ошибке:

# bad-op.sh: 5: No such file or directory

Иногда, в операциях проверки, с использованием квадратных скобок ([ ]), переменные необходимо брать в двойные кавычки. См. Пример 7-6, Пример 16-4 и Пример 9-6.

Иногда сценарий не в состоянии выполнить команду из-за нехватки прав доступа. Если пользователь не сможет запустить команду из командной строки, то эта команда не сможет быть запущена и из сценария. Попробуйте изменить атрибуты команды, возможно вам придется установить бит suid.

Использование символа -в качестве оператора перенаправления (каковым он не является) может приводить к неожиданным результатам.

command1 2> - | command2 # Попытка передать сообщения об ошибках команде command1 через конвейер...

# ...не будет работать.

command1 2>& - | command2 # Так же бессмысленно.

Спасибо S.C.

Использование функциональных особенностей Bash версии 2 или выше, может привести к аварийному завершению сценария, работающему под управлением Bash версии 1.XX.

#!/bin/bash

minimum_version=2

# Поскольку Chet Ramey постоянно развивает Bash,

# вам может потребоваться указать другую минимально допустимую версию $minimum_version=2.XX.

E_BAD_VERSION=80

if [ "$BASH_VERSION" \< "$minimum_version" ]

then

echo "Этот сценарий должен исполняться под управлением Bash, версии $minimum или выше."

echo "Настоятельно рекомендуется обновиться."

exit $E_BAD_VERSION

fi

...

Использование специфических особенностей Bash может приводить к аварийному завершению сценария в Bourne shell ( #!/bin/sh). Как правило, в Linux дистрибутивах, shявляется псевдонимом bash, но это не всегда верно для UNIX-систем вообще.

Сценарий, в котором строки отделяются друг от друга в стиле MS-DOS ( \r\n ), будет завершаться аварийно, поскольку комбинация #!/bin/bash\r\nсчитается недопустимой. Исправить эту ошибку можно простым удалением символа \r из сценария.

#!/bin/bash

echo "Начало"

unix2dos $0 # Сценарий переводит символы перевода строки в формат DOS.

chmod 755 $0 # Восстановление прав на запуск.

# Команда 'unix2dos' удалит право на запуск из атрибутов файла.

./$0 # Попытка запустить себя самого.

# Но это не сработает из-за того, что теперь строки отделяются

# друг от друга в стиле DOS.

echo "Конец"

exit 0

Сценарий, начинающийся с #!/bin/sh, не может работать в режиме полной совместимости с Bash. Некоторые из специфических функций, присущих Bash, могут оказаться запрещенными к использованию. Сценарий, который требует полного доступа ко всем расширениям, имеющимся в Bash, должен начинаться строкой #!/bin/bash.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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