# Подсказка: Эта функция подобна функции 'isdigit ()',
#+ надо лишь добавить анализ наличия десятичной точки.
select
Оператор select
был заимствован из Korn Shell, и является еще одним инструментом, используемым при создании меню.select
variable [in list] do command... break done
Этот оператор предлагает пользователю выбрать один из представленных вариантов. Примечательно, что select
по-умолчанию использует в качестве приглашения к вводу (prompt) -- PS3 (#? ), который легко изменить.Пример 10-29. Создание меню с помощью select
#!/bin/bash
PS3='Выберите ваш любимый овощ: ' # строка приглашения к вводу (prompt)
echo
select vegetable in "бобы" "морковь" "картофель" "лук" "брюква"
do
echo
echo "Вы предпочитаете $vegetable."
echo ";-))"
echo
break # если 'break' убрать, то получится бесконечный цикл.
done
exit 0
Если в операторе select
список in list не задан, то в качестве списка будет использоваться список аргументов ($@), передаваемый сценарию или функции.Сравните это с поведением оператора цикла
for
variable [in list]в котором не задан список аргументов.
Пример 10-30. Создание меню с помощью select в функции
#!/bin/bash
PS3='Выберите ваш любимый овощ: '
echo
choice_of()
{
select vegetable
# список выбора [in list] отсутствует, поэтому 'select' использует входные аргументы функции.
do
echo
echo "Вы предпочитаете $vegetable."
echo ";-))"
echo
break
done
}
choice_of бобы рис морковь редис томат шпинат
# $1 $2 $3 $4 $5 $6
# передача списка выбора в функцию choice_of()
exit 0
См. так же Пример 34-3.
Глава 11. Внутренние команды
Внутренняя
команда -- это команда, которая встроена непосредственно в Bash. Команды делаются встроенными либо из соображений производительности -- встроенные команды исполняются быстрее, чем внешние, которые, как правило, запускаются в дочернем процессе, либо из-за необходимости прямого доступа к внутренним структурам командного интерпретатора.Действие, когда какая либо команда или сама командная оболочка инициирует (порождает
) новый подпроцесс, что бы выполнить какую либо работу, называется ветвлением (forking) процесса. Новый процесс называется "дочерним" (или "потомком"), а породивший его процесс -- "родительским" (или "предком"). В результате и потомок и предок продолжают исполняться одновременно -- параллельно друг другу.В общем случае, встроенные команды
Bash, при исполнении внутри сценария, не порождают новый подпроцесс, в то время как вызов внешних команд, как правило, приводит к созданию нового подпроцесса.Внутренние команды могут иметь внешние аналоги. Например, внутренняя команда Bash -- echo
имеет внешний аналог /bin/echo и их поведение практически идентично.#!/bin/bash
echo "Эта строка выводится внутренней командой \"echo\"."
/bin/echo "А эта строка выводится внешней командой the /bin/echo."
Ключевое слово
(keyword) -- это зарезервированное слово, синтаксический элемент (token) или оператор. Ключевые слова имеют специальное назначение для командного интерпретатора, и фактически являются элементами синтаксиса языка командной оболочки. В качестве примера можно привести "for", "while", "do", "!", которые являются ключевыми (или зарезервированными) словами. Подобно встроенным командам, ключевые слова жестко зашиты в Bash, но в отличие от встроенных команд, ключевые слова не являются командами как таковыми, хотя при этом могут являться их составной частью[ 24 ].Ввод/вывод
echo
выводит (на stdout
) выражение или содержимое переменной (см. Пример 4-1).echo Hello
echo $a
Для вывода экранированных символов, echo
требует наличие ключа -e. См. Пример 5-2.Обычно, командв echo
выводит в конце символ перевода строки. Подавить вывод это символа можно ключом -n. Команда echo
может использоваться для передачи информации по конвейеру другим командам.