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

ЖАНРЫ

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

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

Шрифт:

clear # Очистка экрана

echo " Список"

echo " ------"

echo "Выберите интересующую Вас персону:"

echo

echo "[E]vans, Roland"

echo "[J]ones, Mildred"

echo "[S]mith, Julie"

echo "[Z]ane, Morris"

echo

read person

case "$person" in

#

Обратите внимание: переменная взята в кавычки.

"E" | "e" )

# Пользователь может ввести как заглавную, так и строчную букву.

echo

echo "Roland Evans"

echo "4321 Floppy Dr."

echo "Hardscrabble, CO 80753"

echo "(303) 734-9874"

echo "(303) 734-9892 fax"

echo "revans@zzy.net"

echo "Старый друг и партнер по бизнесу"

;;

# Обратите внимание: блок кода, анализирующий конкретный выбор, завершается

# двумя символами "точка-с-запятой".

"J" | "j" )

echo

echo "Mildred Jones"

echo "249 E. 7th St., Apt. 19"

echo "New York, NY 10009"

echo "(212) 533-2814"

echo "(212) 533-9972 fax"

echo "milliej@loisaida.com"

echo "Подружка"

echo "День рождения: 11 февраля"

;;

# Информация о Smith и Zane будет добавлена позднее.

* )

# Выбор по-умолчанию.

# "Пустой" ввод тоже обрабатывается здесь.

echo

echo "Нет данных."

;;

esac

echo

# Упражнение:

# --------

# Измените этот сценарий таким образом, чтобы он не завершал работу

#+ после вывода информации о персоне, а переходил на ожидание нового

#+ ввода от пользователя.

exit 0

Очень хороший пример использования case для анализа аргументов, переданных из командной строки.

#! /bin/bash

case "$1" in

"") echo "Порядок

использования: ${0##*/} <filename>"; exit 65;; # Параметры командной строки отсутствуют,

# или первый параметр -- "пустой".

# Обратите внимание на ${0##*/} это подстановка параметра ${var##pattern}. В результате получается $0.

– *) FILENAME=./$1;; # Если имя файла (аргумент $1) начинается с "-",

# то заменить его на ./$1

# тогда параметр не будет восприниматься как ключ команды.

* ) FILENAME=$1;; # В противном случае -- $1.

esac

Пример 10-26. Оператор case допускает использовать подстановку команд вместо анализируемой переменной

#!/bin/bash

# Подстановка команд в "case".

case $( arch ) in # команда "arch" возвращает строку, описывающую аппаратную апхитектуру.

i386 ) echo "Машина на базе процессора 80386";;

i486 ) echo "Машина на базе процессора 80486";;

i586 ) echo "Машина на базе процессора Pentium";;

i686 ) echo "Машина на базе процессора Pentium2 или выше";;

* ) echo "Машина на другом типе процессора";;

esac

exit 0

Оператор case допускает использование шаблонных конструкций.

Пример 10-27. Простой пример сравнения строк

#!/bin/bash

# match-string.sh: простое сравнение строк

match_string

{

MATCH=0

NOMATCH=90

PARAMS=2 # Функция требует два входных аргумента.

BAD_PARAMS=91

[ $# -eq $PARAMS ] || return $BAD_PARAMS

case "$1" in

"$2") return $MATCH;;

* ) return $NOMATCH;;

esac

}

a=one

b=two

c=three

d=two

match_string $a # неверное число аргументов

echo $? # 91

Поделиться с друзьями: