Linux case esac что это

Обновлено: 03.07.2024

Индексная запись esac указывает, где именно это должно быть - на строку, которая ее определяет и иллюстрирует, что это необходимо. @hobbs, вы правы, указатель указывает на строку, которая иллюстрирует его использование, но никак не определяет его, особенно по сравнению с тем, как он описывает использование других символов, таких как «|» или же ";" или же ";;". Теперь, когда я прочитал ответ (ы), «обратный» орфографический «случай» кажется настолько фактическим стандартом для завершения команд, что большинство опытных пользователей воспримут это как должное. Если у вас не было esac или что-то в этом роде, как, по вашему мнению, можно было бы определить, где находится конец case утверждения? Он определяет его как часть синтаксиса case заявления, таким же образом , что else , elif и fi определяются как часть синтаксиса if заявления. У него нет собственной семантики, поэтому об этом нечего сказать, но это в конце определения case оператора, поэтому на этом case оператор заканчивается. Тот факт, что оно case написано задом наперед, является любопытным любопытством, но компьютеру все равно, он просто знает, что ищет определенное слово. @hobbs ". тут нечего сказать . ", но вы только что написали параграф, объясняющий, почему тут нечего сказать. Важно просто понять намерения "esac". Вот почему этот вопрос имеет прямой ответ с большим количеством голосов.

Как fi для if и done для for , esac является искомым способом закончить case заявление.

esac как case пишется назад, а как fi это if пишется в обратном направлении. Я не знаю, почему токен, заканчивающий for блок, не является rof .

Представьте, что вам нужно печатать \od каждый раз, когда вы хотите использовать эту утилиту! Что редко, но моя точка зрения стоит;) Вытащил вас из 666. Всегда пожалуйста: P. И отличный ответ! @Wildcard Это fi и нет neht , поэтому по аналогии это будет rof (или elihw ) и нет od (также, конечно, od уже занято) . но, возможно, это требует слишком много самосогласованности из одного из самых несовместимых языков есть.

esac Ключевое слово действительно требуется разделитель , чтобы закончить case заявление , в bash и большинство оболочек используется в Unix / Linux за исключением csh семьи.

Оригинальная оболочка Bourne была создана Стивом Борном, который ранее работал над ALGOL68 . Этот язык изобрел эту технику обратного слова для разделения блоков.

Последнее не более , do/od но do/done в Bourne и все производных оболочек в том числе bash из - за od уже существующие в качестве команды Unix с момента его создания ( о ЛАСТАХ д UMP ).

Следует отметить , что do/done функциональные блоки вводятся либо в for , на while , или until инструкция. for , while И until не должны быть прекращены , как done достаточно. Вот почему нет нужды в гипотетических rof и elihw токенах.

" esac " Завершает более раннее " case ", чтобы сформировать " кодовый блок ".

В Algol68 они используются, как правило, для завершения вложения используется обратная последовательность символов вводящего ключевого слова, например ( if

Я бы назвал их «Охраняемые блоки» в честь Эдсгера Дейкстры и его « Охраняемого командного языка» .

od по-видимому, не использовался в Bourne Shell из-за существования в Unix команды «od» .

История:

Идея "Охраняемого блока" пришла из Алгола 68, например, английского:

Советская реализация LGU Algol68 сделала то же самое: на английском языке благоговейная формулировка Algol68 гласит case

esac : на кириллице это звучит так выб

Затем в 1975 году кодовые блоки Algol68 были заимствованы Эдсгером Дейкстрой для его защищенного командного языка . например

Предположительно, Диджстра использовал «Охраняемые блоки», чтобы преодолеть неоднозначность Dangling else, реализованную в Algol60 и затем переработанную на языке программирования Си . (ср. сдвиг-уменьшение конфликта. )

Наконец - из Algol68 - « esac » сделал его в оболочку Bourne 1977 года (где вы обнаружили esac ) благодаря Стивену Борну, который разработал ранний компилятор Algol68 под названием ALGOL 68C .

Известно, что Стивен также использовал эти самые защищенные блоки в «заголовочном файле C», который называется macro.h

Известные гении программного обеспечения Лэндон Курт Нолл и Ларри Бассель наткнулись на код macro.h Стива в 1984 году, когда работали в группе переноса Genix National Semiconductor, и пытались понять, как это можно сделать. И вот тогда Landon & Larry создали Международный конкурс кодов с запутанным кодом C .

С 1984 года по сегодняшний день существует несколько тысяч других «лучших» языков программирования, которые не используют охраняемые команды Дейкстры. И использование их Стивеном Борном в macro.h настоящее время часто цитируется в «диссертациях по разработке программного обеспечения» магистрантов ИТ как доказательство того, что они не спали на лекциях. :-)

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

0) echo "значение х равно 0"

5) echo "значение х равно 5"

9) echo "значение х равно 9"

*) echo "значение неизвестно"

Зачем нужно использовать case, когда вы можно использовать if? Ниже приведен пример эквивалентного скрипта, написанного с использованием if. Решение о том, что быстрее написать и легче прочесть, предлагается принять самостоятельно:

if [ "$x" -eq 0 ]; then

echo "Значение х равно 0"

elif [ "$x" -eq 5 ]; then

echo "значение х равно 5"

elif [ "$x" -eq 9 ]; then

echo "значение х равно 9"

echo "Значение х определить не удалось"

5.8.3 Оператор case

5.8.3 Оператор case Формат оператора case таков: case word in [[(] pattern [| pattern]…) list;;]… esacКоманда case вначале производит раскрытие слова word, и пытается сопоставить результат с каждым из образцов pattern поочередно. После нахождения первого совпадения дальнейшие проверки не производятся,

Пример оператора Select Case

Пример оператора Select Case Здесь явно не помешает пример, показывающий, как в действительности может выглядеть структура Select Case. Select Case objRol l OfFi l m.Type Case "Слайдовая" intСлайдовые = intСлайдовые + 1 Case "Цветная негативная" intЦветныеНегативные =

Оператор Case Else

Дополнительные сведения об операторе Case

Дополнительные сведения об операторе Case В предыдущем примере критерии, заданные в операторах Case, были просто цветочками, детскими вопросами типа "Равно ли свойство Туре тому-то и тому-то?" Но с помощью оператора Case вы можете задавать и значительно более сложные

1.5.3. Предложение case в Ruby

1.5.3. Предложение case в Ruby Во всех современных языках есть та или иная форма многопутевого ветвления. В C/C++ и Java это предложение switch, а в Pascal — предложение case. Служат они одной и той же цели и функционируют примерно одинаково.Предложение case в Ruby похоже, но при ближайшем

Оператор case

Оператор case Конструкция case используется для ветвления, когда может существовать более двух возможных результатов условного выражения. Она также имеет синтаксис двух видов: case выражение ofзначение1: блок_кода1;…значениеN: блок_кодаN; end;илиcase выражение ofзначение1:

5.2.10.2. Инструкция CASE

5.2.10.2. Инструкция CASE CASE case_value WHEN when_valueTHEN statement_list[WHEN when_value THEN statement_list] …[ELSE statement_list]END CASEИли: CASE WHEN search_condition THEN statement_list[WHEN search_condition THEN statement_list] …[ELSE statement_list]END CASEИнструкция CASE для сохраненных подпрограмм осуществляет сложную условную конструкцию. Если search_condition равно true,

Пример 10-24. Использование case

18.4. Оператор case

18.4. Оператор case Оператор case является многовариантным оператором. С его помощью можно искать значения, используя заданный шаблон. Если совпадение с шаблоном установлено, можно выполнять команды, основываясь исключительно на этом соответствии. Ниже приводится формат

18.4.1. Простой оператор case

18.4.1. Простой оператор case Следующий сценарий отображает приглашение для ввода чисел от 1 до 5. Число передается оператору case, переменной ans присваивается значение ans оператора case, и значение ANS сравнивается с каждым шаблоном.Если соответствие установлено, команды из

10.1. ПРЕДПОСЫЛКИ ПОЯВЛЕНИЯ CASE-СРЕДСТВ

10.1. ПРЕДПОСЫЛКИ ПОЯВЛЕНИЯ CASE-СРЕДСТВ Тенденции развития современных информационных технологий приводят к постоянному усложнению автоматизированных систем (АС). Для борьбы со сложностью проектов в настоящее время созданы системы автоматизированного проектирования

10.2. ОБЗОР CASE-СИСТЕМ

10.2. ОБЗОР CASE-СИСТЕМ На сегодняшний день российский рынок программного обеспечения располагает следующими наиболее развитыми CASE-средствами:• Vantage Team Builder (Westmount I–CASE);• Designer/2000;• Silverrun;• ERwin+BPwin;• S-Designor;• CASE.Аналитик;• Rational Rose.Кроме того, на рынке постоянно появляются

Favorite

Добавить в избранное

Заявление Case в Bash

О ператоры case в Bash обычно используются для упрощения сложных условий, когда у вас есть несколько вариантов. Использование оператора case вместо вложенного оператора if поможет вам сделать ваши bash-сценарии более удобочитаемыми и более простыми в обслуживании.

Оператор case в Bash имеет схожую концепцию с оператором переключения Javascript или C. Основное отличие состоит в том, что, в отличие от оператора C switch, оператор case не продолжает поиск соответствия шаблону после того, как он нашел один и выполнил операторы, связанные с этим шаблоном.

В этой статье мы рассмотрим основы инструкций случая Bash и покажем, как их использовать в сценариях оболочки.

Синтаксис описания case

Оператор case имеет следующую форму:

Пример заявления case

Вот пример использования оператора case в bash-скрипте, который будет печатать официальный язык данной страны:

Читать Настройка Linux-шлюза/маршрутизатора, руководство для не сетевых администраторов. Часть 3

Сохраните пользовательский скрипт в виде файла и запустите его из командной строки.

Скрипт попросит вас ввести страну. Например, если вы введете «Russia», она будет соответствовать первому шаблону, и команда echo в этом предложении будет выполнена.

Скрипт выведет следующий вывод:

Если вы вводите страну, которая не соответствует ни одному другому шаблону, кроме подстановочного символа по умолчанию, скажем, Ukraine, скрипт выполнит команду echo внутри предложения по умолчанию.

Заключение

К настоящему времени вы должны хорошо понимать, как писать оператор case. Он часто используются для передачи параметров в сценарий оболочки из командной строки. Например, сценарии инициализации используют операторы case для запуска, остановки или перезапуска служб.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

BASH — Bourne-Again SHell (что может переводится как «перерожденный шел», или «Снова шел Борна(создатель sh)»), самый популярный командный интерпретатор в юниксоподобных системах, в особенности в GNU/Linux. Ниже приведу ряд встроенных команд, которые мы будем использовать для создания своих скриптов.

break выход из цикла for, while или until
continue выполнение следующей итерации цикла for, while или until
echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
exit выход из оболочки
export отмечает аргументы как переменные для передачи в дочерние процессы в среде
hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
kill посылает сигнал завершения процессу
pwd выводит текущий рабочий каталог
read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\
return заставляет функцию оболочки выйти с указанным значением
shift перемещает позиционные параметры налево
test вычисляет условное выражение
times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
trap указывает команды, которые должны выполняться при получении оболочкой сигнала
unset вызывает уничтожение переменных оболочки
wait ждет выхода из дочернего процесса и сообщает выходное состояние.

И конечно же кроме встроенных команд мы будем использовать целую кучу внешних, отдельных команд-программ, с которыми мы познакомимся уже в процессе

Что необходимо знать с самого начала

  1. Любой bash-скрипт должен начинаться со строки:

Переменные и параметры скрипта

Приведу как пример небольшой пример, который мы разберем:

Результат выполнения скрипта:

$ ./test.sh qwerty
Вы запустили скрипт с именем ./test.sh и параметром qwerty
Вы запустили скрипт с именем $script_name и параметром $parametr1

После того как мы познакомились как использовать переменные и передавать скрипту параметры, время познакомиться с зарезервированными переменными:

Условные операторы, думаю, знакомы практически каждому, кто хоть раз пытался на чем-то писать программы. В bash условия пишутся след. образом (как обычно на примере):

Результат выполнения скрипта:

$ ./primer2.sh 1 1
Применик 1 и источник 1 один и тот же файл!

$ ./primer2.sh 1 2
Удачное копирование!

Структура if-then-else используется следующим образом:

if <команда или набор команд возвращающих код возврата(0 или 1)>
then
<если выражение после if истино, то выполняется этот блок>
else
<если выражение после if ложно, тот этот>

В качестве команд возвращающих код возврата могут выступать структуры [[ , [ , test, (( )) или любая другая(или несколько) linux-команда.

test - используется для логического сравнения. после выражения, неоьбходима закрывающая скобка "]"
[ - синоним команды test
[[ - расширенная версия "[" (начиная с версии 2.02)(как в примере), внутри которой могут быть использованы || (или), & (и). Долна иметь закрывающуб скобку "]]"
(( )) - математическое сравнение.

для построения многоярусных условий вида:

для краткости и читаемости кода, можно использовать структуру:

Условия. Множественный выбор

Если необходимо сравнивать какоую-то одну переменную с большим количеством параметров, то целесообразней использовать оператор case.

$ ./menu2.sh
Выберите редатор для запуска:
1 Запуск программы nano
2 Запуск программы vi
3 Запуск программы emacs
4 Выход

После выбор цифры и нажатия Enter запуститься тот редактор, который вы выбрали(если конечно все пути указаны правильно, и у вас установлены эти редакторы :) )

Прведу список логических операторв, которые используются для конструкции if-then-else-fi:

С основами языка и условиями мы разобрались, чтобы не перегружать статью, разобью её на несколько частей(допустим на 3). Во второй части разберем операторы цикла и выполнение математических операций.

Циклы. Цикл for-in.

Оператор for-in предназначен для поочередного обращения к значениям перечисленным в списке. Каждое значение поочередно в списке присваивается переменной.
Синтаксис следующий:

Рассмотрим небольшой пример:

После выполнения примера в первых 5 виртуальных консолях(терминалах) появится строка с её номером. В переменную $i поочередно подставляются значения из списка и в цикле идет работа со значением этой переменной

Циклы. Цикл while.

Цикл while сложнее цикла for-in и используется для повторения команд, пока какое-то выражение истинно( код возврата = 0).
Синтаксис оператора следующий:

Пример работы цикла рассмотрим на следующем примере:

А теперь результат работы скрипта:

Как видим цикл выполняется до тех пор, пока мы не введем что-то отличное от «yes». Между do и done можно описывать любые структуры, операторы и т.п., все они будут выполнятся в цикле.Но следует быть осторожным с этим циклом, если вы запустите на выполнение в нём какую-либо команду, без изменения переменной выражения, вы можете попасть в бесконечный цикл.

Теперь об условии истинности. После while , как и в условном операторе if-then-else можно вставлять любое выражение или команду, которая возвращает код возврата, и цикл будет исполнятся до тех пор, пока код возврата = 0! Оператор [ аналог команды test , которая проверяет истинность условия, которое ей передали.

Рассмотрим еще один пример, я взял его из книги Advanced Bash Scripting. Уж очень он мне понравился :), но я его немного упростил. В этом примере мы познакомимся с еще одним типом циклов UNTIL-DO. Эта практически полный аналог цикла WHILE-DO, только выполняется пока какое-то выражение ложно.
Вот пример:

Результат выполнения скрипта:

Команда let .
Команда let производит арифметические операции над числами и переменными.
Рассмотрим небольшой пример, в котором мы производим некоторые вычисления над введенными числами:

Ну вот, как видите ничего сложного, список математических операций стандартный:

+ — сложение
— — вычитание
* — умножение
/ — деление
** — возведение в степень
% — модуль(деление по модулю), остаток от деления
let позволяет использовать сокращения арифметических команд, тем самым сокращая кол-во используемых переменных. Например: a = a+b эквивалентно a +=b и т.д

Работа с внешними программами при написании shell-скриптов

Для начала немного полезной теории.

В bash (как и многих других оболочках) есть встроенные файловые дескрипторы: 0 (stdin) , 1 (stdout) , 2 (stderr) .
stdout — Стандартный вывод. Сюда попадает все что выводят программы
stdin — Стандартный ввод. Это все что набирает юзер в консоли
stderr — Стандартный вывод ошибок.
Для операций с этими дескрипторами, существуют специальные символы: > (перенаправление вывода), < (перенаправление ввода). Оперировать ими не сложно. Например:

Если есть необходимость дописывать в файл(при использовании " > " он заменятеся), необходимо вместо " > " использовать " >> "

после просьбы sudo ввести пароль, он возьмется из файла my_password, как будто вы его ввели с клавиатуры.
Если необходимо записать в файл только ошибки, которые могли возникнуть при работе программы, то можно использовать:

цифра 2 перед " > " означает что нужно перенаправлять все что попадет в дескриптор 2(stderr).
Если необходимо заставить stderr писать в stdout , то это можно след. образом:

символ " & " означает указатель на дескриптор 1(stdout)
(Поумолчанию stderr пишет на ту консоль, в котрой работает пользователь(вренее пишет на дисплей)).

Конвеер — очень мощный инструмент для работы с консолью Bash. Синтаксис простой:
команда1 | команда 2 — означает, что вывод команды 1 передастся на ввод команде 2
Конвееры можно группировать в цепочки и выводить с помощью перенаправления в файл, например:

вывод команды ls -la передается команде grep , которая отбирает все строки, в которых встретится слово hash, и передает команде сортировке sort , которая пишет результат в файл sorting_list. Все довольно понятно и просто.

Чаще всего скрипты на Bash используются в качестве автоматизации каких-то рутинных операций в консоли, отсюда иногда возникает необходимость в обработке stdout одной команды и передача на stdin другой команде, при этом результат выполнения одной команды должен быть неким образом обработан. В этом разделе я постораюсь объяснить основные принципы работы с внешними командами внутри скрипта. Думаю что примеров я привел достаточно и можно теперь писать только основные моменты.

1. Передача вывода в переменную.

Для того чтобы записать в переменную вывод какой-либо команды, достаточно заключить команду в `` ковычки, например

Результат работы: qwerty

Однако если вы захотите записать в переменную список директорий, то необходимо, должным образом обработать результат для помещения данных в переменную. Рассмотрим небольшой, пример:

Здесь мы используем цикл for-do-done для архивирование всех директорий в папке /svn/ с помощью команды svnadmin hotcopy (что в нашем случае не имеет никого значения, просто как пример). Наибольшй интерес вызывает строка: LIST= find /svn/ -type d 2>/dev/null| awk ' '| sort|uniq | tr '\n' ' ' В ней переменной LIST присваивается выполнение команды find, обработанной командами awk, sort, uniq,tr(все эти команды мы рассматривать не будем, ибо это отдельная статья). В переменной LIST будут имена всех каталогов в папке /svn/ пгомещенных в одну строку(для того чтобы её стравить циклу.

Читайте также: