<Предыдущая | Содержание: | Следующая>
Выполнение нескольких действий
В версиях колотить до 4.0 г., случаев позволяет выполнить только одно действие при успешном совпадении. После успешного совпадения команда завершится. Здесь мы видим скрипт, проверяющий персонажа:
#! / Bin / Баш
# case4-1: проверить персонажа
read -n 1 -p "Введите символ>" echo
case $ REPLY в
[[: upper:]]) echo «$ REPLY - это верхний регистр». ;;
[[: lower:]]) echo «$ REPLY - это нижний регистр». ;;
[[: alpha:]]) echo "'$ REPLY' является буквенным". ;;
[[: digit:]]) echo "'$ REPLY' - это цифра." ;; [[: graph:]]) echo "'$ REPLY' - видимый символ." ;;
[[: punct:]]) echo "$ REPLY - это знак препинания". ;; [[: space:]]) echo "'$ REPLY' - это пробельный символ." ;; [[: xdigit:]]) echo "$ REPLY - шестнадцатеричная цифра." ;;
ESAC
#! / Bin / Баш
# case4-1: проверить персонажа
read -n 1 -p "Введите символ>" echo
case $ REPLY в
[[: upper:]]) echo «$ REPLY - это верхний регистр». ;;
[[: lower:]]) echo «$ REPLY - это нижний регистр». ;;
[[: alpha:]]) echo "'$ REPLY' является буквенным". ;;
[[: digit:]]) echo "'$ REPLY' - это цифра." ;; [[: graph:]]) echo "'$ REPLY' - видимый символ." ;;
[[: punct:]]) echo "$ REPLY - это знак препинания". ;; [[: space:]]) echo "'$ REPLY' - это пробельный символ." ;; [[: xdigit:]]) echo "$ REPLY - шестнадцатеричная цифра." ;;
ESAC
Запуск этого скрипта дает следующее:
[я @ linuxbox ~] $ случай4-1
Введите символ> a
«а» - строчные буквы.
[я @ linuxbox ~] $ случай4-1
Введите символ> a
«а» - строчные буквы.
Сценарий работает по большей части, но не работает, если символ соответствует более чем одному из классов символов POSIX. Например, символ «a» - это строчная и буквенная буква, а также шестнадцатеричная цифра. В колотить до версии 4.0 не было возможности случаев для соответствия более чем одному тесту. Современные версии колотить, добавьте обозначение «;; &» к
завершать каждое действие, так что теперь мы можем сделать это:
#! / Bin / Баш
# case4-2: проверить персонажа
read -n 1 -p "Введите символ>" echo
case $ REPLY в
[[: upper:]]) echo «$ REPLY - это верхний регистр». ;; &
[[: lower:]]) echo «$ REPLY - это нижний регистр». ;; &
[[: alpha:]]) echo "'$ REPLY' является буквенным". ;; &
[[: digit:]]) echo "'$ REPLY' - это цифра." ;; & [[: graph:]]) echo "'$ REPLY' - видимый символ." ;; &
[[: punct:]]) echo "$ REPLY - это знак препинания". ;; & [[: space:]]) echo "'$ REPLY' - это пробельный символ." ;; & [[: xdigit:]]) echo "'$ REPLY' - шестнадцатеричная цифра." ;; &
ESAC
#! / Bin / Баш
# case4-2: проверить персонажа
read -n 1 -p "Введите символ>" echo
case $ REPLY в
[[: upper:]]) echo «$ REPLY - это верхний регистр». ;; &
[[: lower:]]) echo «$ REPLY - это нижний регистр». ;; &
[[: alpha:]]) echo "'$ REPLY' является буквенным". ;; &
[[: digit:]]) echo "'$ REPLY' - это цифра." ;; & [[: graph:]]) echo "'$ REPLY' - видимый символ." ;; &
[[: punct:]]) echo "$ REPLY - это знак препинания". ;; & [[: space:]]) echo "'$ REPLY' - это пробельный символ." ;; & [[: xdigit:]]) echo "'$ REPLY' - шестнадцатеричная цифра." ;; &
ESAC
Когда мы запускаем этот скрипт, мы получаем следующее:
[я @ linuxbox ~] $ случай4-2
Введите символ> a «а» - строчные буквы. «а» - это алфавит.
«а» - видимый символ. «а» - шестнадцатеричная цифра.
[я @ linuxbox ~] $ случай4-2
Введите символ> a «а» - строчные буквы. «а» - это алфавит.
«а» - видимый символ. «а» - шестнадцатеричная цифра.
Добавление синтаксиса «;; &» позволяет case перейти к следующему тесту, а не просто завершить его.