Организовать диалоговый ввод значения переменной можно с помощью встроенной команды read
:
echo -n "Продолжать? (y/n): "
read yesno
echo $yesno
Ключ -nкоманды echo
не выводит символ новой строки в конце сообщения, то есть не переводит строку. Команда read
читает значение, введённое пользователем с клавиатуры, и записывает его в переменную yesno
. Последняя команда выводит только что введенное значение.
Одной командой read
можно прочитать несколько переменных:
read name middle lastname
Пользователь должен ввести значения переменных, разделяя их пробелами, и для окончания ввода нажать <���Ввод>. Если введено меньше значений, чем нужно, оставшимся переменным будет присвоена пустая строка. Если больше, то весь остаток строки будет присвоен последней из перечисленных переменных.
Кроме подстановки обычных переменных (п.3.4.4) и раскрытия шаблонов имен файлов (п.3.4.5), оболочка bashумеет выполнять еще и такие подстановки:
♦ Подстановка тильды:
~ заменяется на имя домашнего каталога пользователя, запустившего сценарий;
~+ заменяется на путь к текущему каталогу;
~- заменяется на путь к предыдущему каталогу.
♦ Раскрытие скобок:
строка1{строка2,строка3...}строкаN
заменяется на: строка1строка2строкаN строка1строка3строкаN ...
Пробелов внутри скобок быть не должно. Эта функция полезна, когда нужно применить одну команду к нескольким файлам, не подходящим под общий шаблон:
$ cat /home/den/linuxbook/{intro,param,subst} > glava8
♦ Подстановка арифметических выражений:
$((выражение))
или $[выражение]
— эквивалентные формы записи. Внутри выражения выполняются подстановки параметров. Приоритет арифметических операций — обычный, подробнее см. man bash,
секция ARITHMETIC EVALUATION.
Например, количество часов, прошедшее с момента запуски оболочки, можно подсчитать командой:
$ echo $(( $SECONDS/3600 ))
Интерпретатор bashподдерживает одномерные массивы с неограниченным числом элементов. В других оболочках существуют определенные ограничения на массивы, например, в kshмаксимальное число элементов массива ограничено 1024 элементами.
Нумерация элементов начинается с нуля. Тип элементов массива, как и тип параметров, строковый. Присвоить значение элементу массива можно с помощью такой конструкции:
Имя_массива[индекс] = значение
, например:
$ weekday[0]=Понедельник
$ weekday[4]=Пятница
Обратиться к значению элемента массива можно следующим образом:
${имя_массива[индекс]}
Например, вывести значение первого элемента массива можно так:
$ echo ${weekday[0]}
Обратиться ко всем элементам массива сразу можно с помощью одного из выражений:
${имя_массива[*]}
или ${имя_массива[@]}
, например:
$echo ${weekday[*]}
Понедельник Пятница
Второе выражение нужно использовать, если значение хотя бы одного элемента массива может содержать пробелы.
Можно инициализировать массив целиком: команда
$ weekday=(Пн Вт Ср Чт Пт Сб Вс)
эквивалентна списку
$ weekday[0]=Пн; weekday[1] =Вт; ... weekday[6] =Вс
Эти способы инициализации массивов могут применяться как в bash, так и в kshи в других командных оболочках. А следующий способ работает только в bash:
$ holidays= ([0]=Sunday [6]=Saturday)
8.4. Управляющие структуры
Напоминаю (п.3.4.7), что список команд — это одиночная команда, конвейер или последовательность команд/конвейеров, разделенных одним из операторов: ; && ||, завершенная точкой с запятой. Не забывайте ставить точку с запятой даже после одиночной команды, терять ее — типичная ошибка начинающих программистов.
В синтаксис следующих команд квадратные скобки не входят: они ограничивают необязательные выражения.
8.4.1. Условные операторы
Оператор варианта case
Синтаксис:
case значение in
[шаблон1) список1;;
шаблон2 | шаблон3) список2;; ]
esac
Ищется первый шаблон, совпадающий со значением. Если он найден, то выполняется соответствующий ему список команд, завершенный двумя символами «;». Шаблон и список разделяются символом «)». Одному списку команд может соответствовать несколько шаблонов, тогда они разделяются символом «|».
Читать дальше
Конец ознакомительного отрывка
Купить книгу