Читаем Linux: Полное руководство онлайн бесплатно
Ключ -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)
Напоминаю (п.3.4.7), что список команд — это одиночная команда, конвейер или последовательность команд/конвейеров, разделенных одним из операторов: ; && ||, завершенная точкой с запятой. Не забывайте ставить точку с запятой даже после одиночной команды, терять ее — типичная ошибка начинающих программистов.
В синтаксис следующих команд квадратные скобки не входят: они ограничивают необязательные выражения.
Оператор варианта case
Синтаксис:
case значение in
[шаблон1) список1;;
шаблон2 | шаблон3) список2;; ]
esac
Ищется первый шаблон, совпадающий со значением. Если он найден, то выполняется соответствующий ему список команд, завершенный двумя символами «;». Шаблон и список разделяются символом «)». Одному списку команд может соответствовать несколько шаблонов, тогда они разделяются символом «|».
В шаблонах могут использоваться метасимволы *, ? и [] (о подстановке метасимволов сказано в п.3.4.5). С их помощью можно организовать инструкцию, действующую как default в операторе switch языка С.




