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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Ключ -t позволяет ограничивать время ожидания ввода командой read(см. Пример 9-4).

Команда readможет считывать значения для переменных из файла, перенаправленного на stdin . Если файл содержит не одну строку, то переменной будет присвоена только первая строка. Если команде readбудет передано несколько переменных, то первая строка файла будет разбита, по пробелам, на несколько подстрок, каждая из которых будет записана в свою переменную. Будьте осторожны!

Пример 11-6. Чтение командой read из файла через перенаправление

#!/bin/bash

read var1

echo "var1 = $var1"

# Первая строка из "data-file" целиком записывается в переменную var1

read var2 var3

echo "var2 = $var2 var3 = $var3"

# Обратите внимание!

# Поведение команды "read" далеко от ожидаемого!

# 1) Произошел возврат к началу файла.

# 2) Вместо того, чтобы последовательно читать строки из файла,

# по числу переменных, первая строка файла была разбита на подстроки,

# разделенные пробелами, которые и были записаны в переменные.

# 3) В последнюю переменную была записана вся оставшаяся часть строки.

# 4) Если команде "read" будет передано большее число переменных, чем подстрок

# в первой строке файла, то последние переменные останутся "пустыми".

echo "------------------------------------------------"

# Эта проблема легко разрешается с помощью цикла:

while read line

do

echo "$line"

done

# Спасибо Heiner Steven за разъяснения.

echo "------------------------------------------------"

# Разбор строки, разделенной на поля

# Для задания разделителя полей, используется переменная $IFS,

echo "Список всех пользователей:"

OIFS=$IFS; IFS=: # В файле /etc/passwd, в качестве разделителя полей

# используется символ ":" .

while read name passwd uid gid fullname ignore

do

echo "$name ($fullname)"

done

IFS=$OIFS # Восстановление предыдущего состояния переменной $IFS.

# Эту часть кода написал Heiner Steven.

# Если переменная $IFS устанавливается внутри цикла,

#+ то отпадает необходимость сохранения ее первоначального значения

#+ во временной переменной.

# Спасибо Dim Segebart за разъяснения.

echo "------------------------------------------------"

echo "Список всех пользователей:"

while IFS=: read name passwd uid gid fullname ignore

do

echo "$name ($fullname)"

done

echo

echo "Значение переменной \$IFS осталось прежним: $IFS"

exit 0

картинка 64Передача информации, выводимой командой echo, по конвейеру команде read, будет вызывать ошибку.

Тем не менее, передача данных по конвейеру от cat, кажется срабатывает.

cat file1 file2 |

while read line

do

echo $line

done

Файловая система

cd

Уже знакомая нам команда cd, изменяющая текущий каталог, может быть использована в случаях, когда некоторую команду необходимо запустить только находясь в определенном каталоге.

(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)

[взято из упоминавшегося ранее примера]

Команда cdс ключом -P (physical) игнорирует символические ссылки.

Команда " cd -" выполняет переход в каталог $OLDPWD -- предыдущий рабочий каталог.

картинка 65Неожиданным образом выполняется команда cd, если ей передать, в качестве каталога назначения, два слэша.

bash$ cd //

bash$ pwd

//

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

pwd

Выводит название текущего рабочего каталога (Print Working Directory) (см. Пример 11-7). Кроме того, имя текущего каталога хранится во внутренней переменной $PWD.

pushd, popd, dirs

Этот набор команд является составной частью механизма "закладок" на каталоги и позволяет перемещаться по каталогам вперед и назад в заданном порядке. Для хранения имен каталогов используется стек (LIFO -- "последний вошел, первый вышел").

pushd dir-name-- помещает имя текущего каталога в стек и осуществляет переход в каталог dir-name .

popd-- выталкивает, находящееся на вершине стека, имя каталога и одновременно осуществляет переход в каталог, оказавшийся на врешине стека.

dirs-- выводит содержимое стека каталогов (сравните с переменной $DIRSTACK). В случае успеха, обе команды -- pushdи popdавтоматически вызывают dirs.

Эти команды могут оказаться весьма полезными, когда в сценарии нужно производить частую смену каталогов, но при этом не хочется жестко "зашивать" имена каталогов. Обратите внимание: содержимое стека каталогов постоянно хранится в переменной-массиве -- $DIRSTACK .

Пример 11-7. Смена текущего каталога

#!/bin/bash

dir1=/usr/local

dir2=/var/spool

pushd $dir1

# Команда 'dirs' будет вызвана автоматически (на stdout будет выведено содержимое стека).

echo "Выполнен переход в каталог `pwd`." # Обратные одиночные кавычки.

# Теперь можно выполнить какие либо действия в каталоге 'dir1'.

pushd $dir2

echo "Выполнен переход в каталог `pwd`."

# Теперь можно выполнить какие либо действия в каталоге 'dir2'.

echo "На вершине стека находится: $DIRSTACK."

popd

echo "Возврат в каталог `pwd`."

# Теперь можно выполнить какие либо действия в каталоге 'dir1'.

popd

echo "Возврат в первоначальный рабочий каталог `pwd`."

exit 0

Переменные

let

Команда letпроизводит арифметические операции над переменными. В большинстве случаев, ее можно считать упрощенным вариантом команды expr.

Пример 11-8. Команда let, арифметические операции.

#!/bin/bash

echo

let a=11 # То же, что и 'a=11'

let a=a+5 # Эквивалентно "a = a + 5"

# (Двойные кавычки и дополнительные пробелы делают код более удобочитаемым)

echo "11 + 5 = $a"

let "a <<= 3" # Эквивалентно let "a = a << 3"

echo "\"\$a\" (=16) после сдвига влево на 3 разряда = $a"

let "a /= 4" # Эквивалентно let "a = a / 4"

echo "128 / 4 = $a"

let "a -= 5" # Эквивалентно let "a = a - 5"

echo "32 - 5 = $a"

let "a = a * 10" # Эквивалентно let "a = a * 10"

echo "27 * 10 = $a"

let "a %= 8" # Эквивалентно let "a = a % 8"

echo "270 mod 8 = $a (270 / 8 = 33, остаток = $a)"

echo

exit 0

eval

eval arg1 [arg2] ... [argN]

Транслирует список аргументов, из списка, в команды.

Пример 11-9. Демонстрация команды eval

#!/bin/bash

y=`eval ls -l` # Подобно y=`ls -l`

echo $y # но символы перевода строки не выводятся, поскольку имя переменной не в кавычках.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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