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


Авторские права

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

Здесь можно скачать бесплатно "Мендель Купер - Искусство программирования на языке сценариев командной оболочки" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Мендель Купер - Искусство программирования на языке сценариев командной оболочки
Рейтинг:
Название:
Искусство программирования на языке сценариев командной оболочки
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

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

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



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






}


Check_if_root () # Проверка прав пользователя.

{ # из примера "ex39.sh".

if [ "$UID" -ne "$ROOT_UID" ]

then

echo "Этот сценарий должен запускаться с привилегиями root."

exit $E_NOTROOT

fi

}


CreateTempfileName () # Создание "уникального" имени для временного файла.

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

prefix=temp

suffix=`eval date +%s`

Tempfilename=$prefix.$suffix

}


isalpha2 () # Проверка, состоит ли строка только из алфавитных символов.

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

[ $# -eq 1 ] || return $FAILURE


case $1 in

*[!a-zA-Z]*|"") return $FAILURE;;

*) return $SUCCESS;;

esac # Спасибо S.C.

}


abs () # Абсолютное значение.

{ # Внимание: Максимально возможное возвращаеиое значение

# не может превышать 255.

E_ARGERR=-999999


if [ -z "$1" ] # Проверка наличия входного аргумента.

then

return $E_ARGERR # Код ошибки, обычно возвращаемый в таких случаях.

fi


if [ "$1" -ge 0 ] # Если не отрицательное,

then #

absval=$1 # оставить как есть.

else # Иначе,

let "absval = (( 0 - $1 ))" # изменить знак.

fi


return $absval

}


tolower () # Преобразование строк символов в нижний регистр

{


if [ -z "$1" ] # Если нет входного аргумента,

then #+ выдать сообщение об ошибке

echo "(null)"

return #+ и выйти из функции.

fi


echo "$@" | tr A-Z a-z

# Преобразовать все входные аргументы ($@).


return


# Для записи результата работы функции в переменную, используйте операцию подстановки команды.

# Например:

# oldvar="A seT of miXed-caSe LEtTerS"

# newvar=`tolower "$oldvar"`

# echo "$newvar" # a set of mixed-case letters

#

# Упражнение: Добавьте в эту библиотеку функцию перевода символов в верхний регистр.

# toupper() [это довольно просто].

}


Для повышения ясности комментариев, выделяйте их особым образом.

## Внимание!

rm -rf *.zzy ## Комбинация ключей "-rf", в команде "rm", чрезвычайно опасна,

##+ особенно при удалении по шаблону.


#+ Продолжение комментария на новой строке.

# Это первая строка комментария

#+ это вторая строка комментария,

#+ это последняя строка комментария.


#* Обратите внимание.


#o Элемент списка.


#> Альтернативный вариант.

while [ "$var1" != "end" ] #> while test "$var1" != "end"


Для создания блочных комментариев, можно использовать конструкцию if-test.

#!/bin/bash


COMMENT_BLOCK=

# Если попробовать инициализировать эту переменную чем нибудь,

#+ то вы получите неожиданный результат.


if [ $COMMENT_BLOCK ]; then


Блок комментария --

=================================

Это строка комментария.

Это другая строка комментария.

Это еще одна строка комментария.

=================================


echo "Эта строка не выводится."


Этот блок комментария не вызывает сообщения об ошибке! Круто!


fi


echo "Эта строка будет выведена на stdout."


exit 0


Сравните этот вариант создания блочных комментариев со встроенным документом, использующимся для создания блочных комментариев.

С помощью служебной переменной $?, можно проверить -- является ли входной аргумент целым числом.

#!/bin/bash


SUCCESS=0

E_BADINPUT=65


test "$1" -ne 0 -o "$1" -eq 0 2>/dev/null

# Проверка: "равно нулю или не равно нулю".

# 2>/dev/null подавление вывода сообщений об ошибках.


if [ $? -ne "$SUCCESS" ]

then

echo "Порядок использования: `basename $0` целое_число"

exit $E_BADINPUT

fi


let "sum = $1 + 25" # Будет выдавать ошибку, если $1 не является целым числом.

echo "Sum = $sum"


# Любая переменная может быть проверена таким образом, а не только входные аргументы.


exit 0


Диапазон, возвращаемых функциями значений, 0 - 255 -- серьезное ограничение. Иногда может оказаться весьма проблематичным использование глобальных переменных, для передачи результата из функции. В таких случаях можно порекомендовать передачу результатов работы функции через запись в stdout.

Пример 33-10. Необычный способ передачи возвращаемого значения

#!/bin/bash

# multiplication.sh


multiply () # Функции выполняет перемножение всех переданых аргументов.

{

local product=1


until [ -z "$1" ] # Пока не дошли до последнего аргумента...

do

let "product *= $1"

shift

done


echo $product # Значение не будет выведено на экран,

} #+ поскольку оно будет записано в переменную.


mult1=15383; mult2=25211

val1=`multiply $mult1 $mult2`

echo "$mult1 X $mult2 = $val1"

# 387820813


mult1=25; mult2=5; mult3=20

val2=`multiply $mult1 $mult2 $mult3`

echo "$mult1 X $mult2 X $mult3 = $val2"

# 2500


mult1=188; mult2=37; mult3=25; mult4=47

val3=`multiply $mult1 $mult2 $mult3 $mult4`

echo "$mult1 X $mult2 X $mult3 X mult4 = $val3"

# 8173300


exit 0

Такой прием срабатывает и для строковых значений. Таким образом, функция может "возвращать" и нечисловой результат.

capitalize_ichar () # Первый символ всех строковых аргументов

{ #+ переводится в верхний регистр.


string0="$@" # Принять все аргументы.


firstchar=${string0:0:1} # Первый символ.

string1=${string0:1} # Остаток строки.


FirstChar=`echo "$firstchar" | tr a-z A-Z`

# Преобразовать в верхний регистр.


echo "$FirstChar$string1" # Выдать на stdout.


}


newstring=`capitalize_ichar "each sentence should start with a capital letter."`

echo "$newstring" # Each sentence should start with a capital letter.


Используя этот прием, функция может "возвращать" даже несколько значений.

Пример 33-11. Необычный способ получения нескольких возвращаемых значений

#!/bin/bash

# sum-product.sh

# Функция может "возвращать" несколько значений.


sum_and_product () # Вычисляет сумму и произведение аргументов.

{

echo $(( $1 + $2 )) $(( $1 * $2 ))

# Вывод на stdout двух значений, разделенных пробелом.

}


echo

echo "Первое число: "

read first


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: Игры с анаграммами.


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

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

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


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

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

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

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

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

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

А что Вы думаете о книге? Оставьте Ваш отзыв.