Чтение онлайн

на главную

Жанры

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

Купер Мендель

Шрифт:

func1

{

echo Это функция.

}

declare -f # Список функций, объявленных выше.

echo

declare -i var1 # var1 -- целочисленная переменная.

var1=2367

echo "переменная var1

объявлена как $var1"

var1=var1+1 # Допустимая арифметическая операция над целочисленными переменными.

echo "переменная var1 увеличена на 1 = $var1."

# Допустимая операция для целочисленных переменных

echo "Возможно ли записать дробное число 2367.1 в var1?"

var1=2367.1 # Сообщение об ошибке, переменная не изменяется.

echo "значение переменной var1 осталось прежним = $var1"

echo

declare -r var2=13.36 # инструкция 'declare' допускает установку свойств переменной

#+ и одновременно присваивать значение.

echo "var2 declared as $var2" # Допускается ли изменять значение readonly переменных?

var2=13.37 # Сообщение об ошибке и завершение работы сценария.

echo "значение переменной var2 осталось прежним $var2" # Эта строка никогда не будет выполнена.

exit 0 # Сценарий завершит работу выше.

9.5. Косвенные ссылки на переменные

Предположим, что значение одной переменной -- есть имя второй переменной. Возможно ли получить значение второй переменной через обращение к первой? Например, Пусть a=letter_of_alphabet и letter_of_alphabet=z, тогда вопрос будет звучать так: "Возможно ли получить значение z, обратившись к переменной a?". В действительности это возможно и это называется косвенной ссылкой. Для этого необходимо прибегнуть к несколько необычной нотации eval var1=\$$var2.

Пример 9-21. Косвенные ссылки

#!/bin/bash

# Косвенные ссылки на переменные.

a=letter_of_alphabet

letter_of_alphabet=z

echo

# Прямое обращение к переменной.

echo "a = $a"

# Косвенное обращение к переменной.

eval a=\$$a

echo "А

теперь a = $a"

echo

# Теперь попробуем изменить переменную, на которую делается ссылка.

t=table_cell_3

table_cell_3=24

echo "\"table_cell_3\" = $table_cell_3"

echo -n "разыменование (получение ссылки) \"t\" = "; eval echo \$$t

# В данном, простом, случае,

# eval t=\$$t; echo "\"t\" = $t"

# дает тот же результат (почему?).

echo

t=table_cell_3

NEW_VAL=387

table_cell_3=$NEW_VAL

echo "Значение переменной \"table_cell_3\" изменено на $NEW_VAL."

echo "Теперь \"table_cell_3\" = $table_cell_3"

echo -n "разыменование (получение ссылки) \"t\" = "; eval echo \$$t

# инструкция "eval" принимает два аргумента "echo" и "\$$t" (назначает равным $table_cell_3)

echo

# (Спасибо S.C. за разъяснения.)

# Еще один способ -- нотация ${!t}, будет обсуждаться в разделе "Bash, версия 2".

# Так же, см. пример "ex78.sh".

exit 0

Пример 9-22. Передача косвенных ссылок в awk

#!/bin/bash

# Другая версия сценария "column totaler"

# который суммирует заданную колонку (чисел) в заданном файле.

# Здесь используются косвенные ссылки.

ARGS=2

E_WRONGARGS=65

if [ $# -ne "$ARGS" ] # Проверка количества входных аргументов.

then

echo "Порядок использования: `basename $0` filename column-number"

exit $E_WRONGARGS

fi

filename=$1

column_number=$2

#===== До этой строки идентично первоначальному варианту сценария =====#

Поделиться:
Популярные книги

Санек 2

Седой Василий
2. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 2

Князь Мещерский

Дроздов Анатолий Федорович
3. Зауряд-врач
Фантастика:
альтернативная история
8.35
рейтинг книги
Князь Мещерский

Без Чести

Щукин Иван
4. Жизни Архимага
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Без Чести

Безродный

Коган Мстислав Константинович
1. Игра не для слабых
Фантастика:
боевая фантастика
альтернативная история
6.67
рейтинг книги
Безродный

Огненный князь

Машуков Тимур
1. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь

Ваше Сиятельство 4т

Моури Эрли
4. Ваше Сиятельство
Любовные романы:
эро литература
5.00
рейтинг книги
Ваше Сиятельство 4т

Вторая невеста Драконьего Лорда. Дилогия

Огненная Любовь
Вторая невеста Драконьего Лорда
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Вторая невеста Драконьего Лорда. Дилогия

Кодекс Крови. Книга V

Борзых М.
5. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга V

Девятое правило дворянина

Герда Александр
9. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Девятое правило дворянина

Цеховик. Книга 1. Отрицание

Ромов Дмитрий
1. Цеховик
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Цеховик. Книга 1. Отрицание

Скрываясь в тени

Мазуров Дмитрий
2. Теневой путь
Фантастика:
боевая фантастика
7.84
рейтинг книги
Скрываясь в тени

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2

Идеальный мир для Лекаря 3

Сапфир Олег
3. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 3

Под маской, или Страшилка в академии магии

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.78
рейтинг книги
Под маской, или Страшилка в академии магии