Разное

Case bash example: 5 Bash Case Statement Examples

Содержание

case bash примеры использования оператора case в скриптах

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

 

 

Скрипт полностью приведен ниже, далее дается разъяснение принципов его работы.

#!/bin/bash

x=0

function debian(){
clear
echo «Do u prefer Debian Mint or Ubuntu?»
read debian
case «$debian» in
[Uu]buntu) echo «oh, u like Ubuntu»;;
[Mm]int) echo «good, u like Linux Mint»;;
*) echo «Um? U typed smth that’s not right»;;
esac
x=1
}

while [ $x = 0 ]
do

clear
echo «Do u use Debian or CentOS?»
read fruit

case «$fruit» in
[Dd]ebian)
debian
x=1
;;

[Cc]ent[Oo][sS])
echo «U use CentOS»
x=1
;;
*)

echo «That is not an option»
sleep 1
clear
echo «Please type either Debian or CentOS»
sleep 1
;;
esac

done

 

 

 

Объяснение принципов работы скрипта с case и функцией

Первой строкой указывается имя интерпретатора команд

#!/bin/bash

Назначается значение переменной, приравниваем x нулю, чтобы выйти из цикла будет значение переменной итерировать

x=0

Создаем функцию debian, выводящую вопрос «Do u prefer Debian Mint or Ubuntu?» и считывающую ответ пользователя.

function debian(){
clear
echo «Do u prefer Debian Mint or Ubuntu?»
read debian

 

Используя case задаем две опции:
case «$debian» in
[Uu]buntu) echo «oh, u like Ubuntu»;;

 

Если ответ Ubuntu (с учетом регистра в первом символе) выводим «oh, u like Ubuntu»
[Mm]int) echo «good, u like Linux Mint»;;

В случае если пользователь выбрал Mint выводим  «good, u like Linux Mint»
*) echo «Um? U typed smth that’s not right»;;

 

Если совпадения не найдено — «Um? U typed smth that’s not right»
esac
x=1
}

Завершаем case с esac и интерируем значение x чтобы выйти из цикла.

 

 

Функция сейчас только задана, вызываться она будет на втором этапе выполнения программы.

Начало собственно программы (так как его увидит пользователь).

while [ $x = 0 ]

do

Очищаем экран и задаем главный вопрос «Do u use Debian or CentOS?»

clear
echo «Do u use Debian or CentOS?»
read systems

Считываем ответ пользователя при помощи read и реагируем на совпадения

case «$systems» in
[Dd]ebian)
debian
x=1
;;

При указании на Debian в любом регистре (первый символ) вызываем заданную ранее функцию debian, которая задаст уточняющий вопрос о любимом дистрибутиве основанном на debian

В случае выбора CentOS просто выводим фразу «U use CentOS».

[Cc]ent[Oo][sS])
echo «U use CentOS»
x=1
;;

Регистр здесь учитываем как для первого знака, так и для последних двух
*)

echo «That is not an option»
sleep 1
clear
echo «Please type either Debian or CentOS»
sleep 1
;;
esac

done

Для любого другого ввода пользователя будет действовать правило заданное с *). Ответ системы будет «That is not an option», затем пауза продолжительностью 1 секунду и повторный запуск основной программы с начала.

 

Используя case можно, например, написать простое консольное меню

Заявление Case в Bash | ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

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

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

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

 

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

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

case EXPRESSION in

  PATTERN_1)
    STATEMENTS
    ;;

  PATTERN_2)
    STATEMENTS
    ;;

  PATTERN_N)
    STATEMENTS
    ;;

  *)
    STATEMENTS
    ;;
esac
  • Каждый оператор case начинается с ключевого слова case, за которым следует выражение case и ключевое слово in. Утверждение заканчивается ключевым словом esac.
  • Вы можете использовать несколько шаблонов, разделенных оператором |. Оператор ) завершает список шаблонов.
  • Шаблон может иметь специальные символы.
  • Шаблон и связанные с ним команды называются предложениями.
  • Каждый пункт должен заканчиваться на ;;.
  • Команды, соответствующие первому шаблону, который соответствует выражению, выполняются.
  • Обычной практикой является использование подстановочного знака звездочки ( *) в качестве окончательного шаблона для определения регистра по умолчанию. Этот шаблон всегда будет совпадать.
  • Если не найдено ни одного шаблона, возвращаемый статус равен нулю. В противном случае возвращаемый статус – это статус завершения выполненных команд.

 

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

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

languages.sh

#!/bin/bash

echo -n "Введите название страны: "
read COUNTRY

echo -n "Официальный язык $COUNTRY это "

case $COUNTRY in

  Russia)
    echo -n "Russia"
    ;;

  Brazil)
    echo -n "Brazil"
    ;;

  Italy | "San Marino" | Switzerland | "Vatican City")
    echo -n "Italian"
    ;;

  *)
    echo -n "неизвестный"
    ;;
esac

 

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

bash languages.sh

 

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

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

Введите название страны: Russia
Официальный язык Russia это Russian

 

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

Введите название страны: Ukraine
Официальный язык Ukraine is неизвестный

 

Заключение

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

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

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

case … in … esac. Краткое введение в программирование на Bash

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

#!/bin/bash

x=5 # инициализируем х значением 5

# проверяем значение х:

case $x in

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

;;

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

;;

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

;;

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

;;

esac

Оператор case проверяет переменную х на равенство трем значениям. В приведенном примере, он сначала проверит, равен ли х нулю 0, затем равен ли он 5, затем равен ли он 9. И, если все проверки завершились неудачно, скрипт выведет сообщение, что значение x определить не получилось. Помните, что «*» означает «все», и в этом случае, «любое другое значение, помимо указанных явно». Если х имеет любое другое значение, отличное от 0, 5 или 9, то это значение попадает во категорию «*». При использовании сase каждое условие должно заканчиваться двумя точками с запятой.

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

#!/bin/bash

x=5 # инициализируем х значением 5

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

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

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

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

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

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

else

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

fi

Поделитесь на страничке

Следующая глава >

If, else, case в Bash

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

If утверждения (и, тесно связанные, case ) позволяют нам принимать решения в наших сценариях Bash. Они позволяют нам решить, следует ли запускать часть кода на основе условий, которые мы можем установить. Если утверждения, объединенные с циклами (которые мы рассмотрим в следующем уроке), позволят нам создавать гораздо более сложные сценарии, которые могут решить более крупные задачи.

Основные положения

Базовый оператор if эффективно говорит, что если конкретный тест верен, тогда выполните заданный набор действий. Если это не так, не выполняйте эти действия. Если следующий формат:

if [ <некоторый тест> ]
then
<команды>
fi

if [ <некоторый тест> ]

then

<команды>

fi

Все , что между then и fi (если в обратном направлении) будет выполняться только если тест (в квадратных скобках) истинно.

Давайте рассмотрим простой пример:

if_example.sh

#!/bin/bash
# Базовый оператор if

if [ $1 -gt 100 ]
then
echo Hey that\’s a large number.
pwd
fi

date

#!/bin/bash

# Базовый оператор if

 

if [ $1 -gt 100 ]

then

echo Hey that\’s a large number.

pwd

fi

 

date

Давайте разберем это:

  • Строка 4 — Посмотрим, больше ли первый аргумент командной строки, чем 100
  • Строка 6 и 7 — будет запущена, только если тест в строке 4 вернется. У вас может быть так много команд здесь, как вам нравится.
  • Строка 6 — обратная косая черта (\) перед одиночной кавычкой (‘) необходима, поскольку одинарная кавычка имеет особое значение для bash, и мы не хотим этого специального значения. Обратная косая черта ускользает от специального значения, чтобы снова сделать обычную одиночную кавычку.
  • Строка 8 — fi сигнализирует конец оператора if. Все команды после этого будут выполняться как обычно.
  • Строка 10 — поскольку эта команда находится за пределами оператора if, она будет выполняться независимо от результата инструкции if.

Контрольная работа

Квадратные скобки ([]) в выражении if являются фактически ссылкой на командный тест . Это означает, что здесь могут использоваться все операторы, которые позволяют тестировать. Посмотрите страницу руководства для теста, чтобы увидеть все возможные операторы (их немало), но некоторые из наиболее распространенных из них перечислены ниже.

операторОписание
! ЭКСПРЕССИЯEXPRESSION неверно.
-n STRINGДлина STRING больше нуля.
-z STRINGДлина STRING равна нулю (т.е. она пуста).
STRING1 = STRING2STRING1 равен STRING2
STRING1! = STRING2STRING1 не равен STRING2
INTEGER1 -eq INTEGER2INTEGER1 численно равен INTEGER2
INTEGER1 -gt INTEGER2INTEGER1 численно больше INTEGER2
INTEGER1 -lt INTEGER2INTEGER1 численно меньше INTEGER2
-d ФАЙЛФАЙЛ существует и является каталогом.
-e ФАЙЛФайл существует.
-r ФАЙЛФАЙЛ существует, и разрешение на чтение предоставляется.
-s FILEФАЙЛ существует и размер больше нуля (т. е. Он не пуст).
-W FILEФАЙЛ существует, и разрешение на запись предоставляется.
-x ФАЙЛФАЙЛ существует, и разрешение на выполнение предоставляется.

Несколько замечаний:

  • = немного отличается от -eq . [001 = 1] вернет false как = выполняет сравнение строк (т. е. Символ для символа тот же), тогда как -eq делает числовое значение сравнения [001 -eq 1] вернет true.
  • Когда мы ссылаемся на FILE выше, мы фактически подразумеваем путь . Помните, что путь может быть абсолютным или относительным и может ссылаться на файл или каталог.
  • Поскольку [] является лишь ссылкой на командный тест, мы можем экспериментировать и пытаться снимать с тестом в командной строке, чтобы убедиться, что наше понимание его поведения верное.

Давайте разберем это:

  • Строка 1 — выполнить сравнение на основе строк. Тест не печатает результат, поэтому вместо этого мы проверяем его статус выхода, что мы будем делать на следующей строке.
  • Строка 2 — переменная $? содержит статус выхода предыдущей команды запуска (в этом случае тест). 0 означает TRUE (или успех). 1 = FALSE (или отказ).
  • Строка 4 — На этот раз мы проводим численное сравнение.
  • Строка 7 — Создайте новый пустой файл myfile (предполагая, что myfile еще не существует).
  • Строка 8 — размер myfile больше нуля?
  • Строка 11 — Перенаправление некоторого содержимого в myfile, так что размер больше нуля.
  • Строка 12 — снова проверьте размер файла myfile . На этот раз он ИСТИНА.

Отступ

Цель состоит в том, чтобы улучшить удобочитаемость и усложнить нам простые, глупые ошибки. В Bash нет никаких правил относительно отступов, поэтому вы можете отступать или не отступать, как вам нравится, и ваши скрипты будут работать точно так же. Я настоятельно рекомендую вам сделать отступ от вашего кода (особенно по мере увеличения ваших скриптов), иначе вам будет все труднее видеть структуру в ваших сценариях.

Вложенные операторы if

Говоря о отступе. Вот прекрасный пример того, когда жизнь облегчает вам жизнь. У вас может быть столько операторов if, сколько необходимо в вашем скрипте. Также возможно иметь оператор if внутри другого оператора if. Например, мы можем проанализировать число, указанное в командной строке:

nested_if.sh

#!/bin/bash
# Вложенные операторы if

if [ $1 -gt 100 ]
then
echo Hey that\’s a large number.
if (( $1 % 2 == 0 ))
then
echo And is also an even number.
fi
fi

#!/bin/bash

# Вложенные операторы if

 

if [ $1 -gt 100 ]

then

echo Hey that\’s a large number.

if (( $1 % 2 == 0 ))

then

echo And is also an even number.

fi

fi

Давайте разберем это:

  • Строка 4 — Выполните следующее, только если первый аргумент командной строки больше 100.
  • Строка 8 — это вариация света в выражении if . Если мы хотим проверить выражение, мы можем использовать двойные скобки, как и для переменных .
  • Строка 10 — запускается только в том случае, если оба оператора if истинны.

Вы можете вложить столько операторов if, сколько хотите, но как общее правило, если вам нужно вложить более трех уровней в глубину, вам, вероятно, стоит подумать о реорганизации вашей логики.

If Else

Иногда мы хотим выполнить определенный набор действий, если статут является истинным, а другой набор действий, если он является ложным. Мы можем разместить это с другим механизмом.

if [ <some test> ]
then
<commands>
else
<other commands>
fi

if [ <some test> ]

then

<commands>

else

<other commands>

fi

Теперь мы можем легко прочитать из файла, если он представлен как аргумент командной строки, иначе прочитанный из STDIN.

else.sh

#!/bin/bash
# else example
if [ $# -eq 1 ]
then
nl $1
else
nl /dev/stdin
fi

#!/bin/bash

# else example

if [ $# -eq 1 ]

then

nl $1

else

nl /dev/stdin

fi

If Elif Else

Иногда у нас может быть ряд условий, которые могут привести к разным путям.

if [<некоторый тест>],
then
<команды>
elif [<some test>],
then
<разные команды>
else
<другие команды>
fi

if [<некоторый тест>],

then

<команды>

elif [<some test>],

then

<разные команды>

else

<другие команды>

fi

Например, может случиться так, что если вам исполнилось 18 или более, вы можете пойти на вечеринку. Если вы не, но у вас есть письмо от ваших родителей, вы можете пойти, но должны вернуться до полуночи. В противном случае вы не можете пойти.

if_elif.sh

#!/bin/bash
# elif statements

if [ $1 -ge 18 ]
then
echo You may go to the party.
elif [ $2 == ‘yes’ ]
then
echo You may go to the party but be back before midnight.
else
echo You may not go to the party.
fi

#!/bin/bash

# elif statements

 

if [ $1 -ge 18 ]

then

echo You may go to the party.

elif [ $2 == ‘yes’ ]

then

echo You may go to the party but be back before midnight.

else

echo You may not go to the party.

fi

Вы можете иметь столько ветвей elif, сколько хотите. Заключительное дополнение также является необязательным.

Логические операции

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

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

and.sh

#!/bin/bash
# and example

if [ -r $1 ] && [ -s $1 ]
then
echo This file is useful.
fi

#!/bin/bash

# and example

 

if [ -r $1 ] && [ -s $1 ]

then

echo This file is useful.

fi

Возможно, мы хотели бы выполнить что-то немного другое, если пользователь либо bob, либо andy.

or.sh

#!/bin/bash
# or example

if [ $USER == ‘bob’ ] || [ $USER == ‘andy’ ]
then
ls -alh
else
ls
fi

#!/bin/bash

# or example

 

if [ $USER == ‘bob’ ] || [ $USER == ‘andy’ ]

then

ls -alh

else

ls

fi

Case

Иногда мы можем захотеть использовать разные пути, основанные на переменной, соответствующей ряду шаблонов. Мы могли бы использовать ряд утверждений if и elif, но это скоро вырастет, чтобы быть недвусмысленно. К счастью, есть case, который может сделать многие вещи удобнее. Это немного сложно объяснить, поэтому вот несколько примеров, чтобы проиллюстрировать:

case <variable> in
<pattern 1>)
<commands>
;;
<pattern 2>)
<other commands>
;;
esac

case <variable> in

<pattern 1>)

<commands>

;;

<pattern 2>)

<other commands>

;;

esac

Вот пример:

case.sh

#!/bin/bash
# case example

case $1 in
start)
echo starting
;;
stop)
echo stoping
;;
restart)
echo restarting
;;
*)
echo don\’t know
;;
esac

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#!/bin/bash

# case example

 

case $1 in

start)

echo starting

;;

stop)

echo stoping

;;

restart)

echo restarting

;;

*)

echo don\’t know

;;

esac

Давайте разберем это:

  • Строка 4 — Эта строка начинает механизм case.
  • Строка 5 — Если $ 1 равно «start», выполните следующие действия. the) означает конец рисунка.
  • Строка 7 — Мы идентифицируем конец этого набора операторов с двойной точкой с запятой (;;). После этого следует рассмотреть следующий случай.
  • Строка 14 — Помните, что тест для каждого случая является шаблоном. * Представляет собой любое количество любых символов. Очень важно поймать все, если, если ни один из других случаев не соответствует. Это не обязательно, но часто используется.
  • Строка 17 — esac — это случай назад и указывает, что мы находимся в конце описания дела. Любые другие утверждения после этого будут выполняться в обычном режиме.

Теперь давайте рассмотрим несколько более сложный пример, где шаблоны используются немного больше.

disk_useage.sh

#!/bin/bash
# Print a message about disk useage.

space_free=$( df -h | awk ‘{ print $5 }’ | sort -n | tail -n 1 | sed ‘s/%//’ )

case $space_free in
[1-5]*)
echo Plenty of disk space available
;;
[6-7]*)
echo There could be a problem in the near future
;;
8*)
echo Maybe we should look at clearing out old files
;;
9*)
echo We could have a serious problem on our hands soon
;;
*)
echo Something is not quite right here
;;
esac

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#!/bin/bash

# Print a message about disk useage.

 

space_free=$( df -h | awk ‘{ print $5 }’ | sort -n | tail -n 1 | sed ‘s/%//’ )

 

case $space_free in

[1-5]*)

echo Plenty of disk space available

;;

[6-7]*)

echo There could be a problem in the near future

;;

8*)

echo Maybe we should look at clearing out old files

;;

9*)

echo We could have a serious problem on our hands soon

;;

*)

echo Something is not quite right here

;;

esac

 

Часть 4. Сложение, вычитание, умножение, деление, модуль в Bash
Часть 6. Циклы for, while, until в Bash

Источник: https://ryanstutorials.net/bash-scripting-tutorial/bash-if-statements.php

5 примеров операторов Case в Bash

Оператор case оболочки Bash похож на оператор switch в C. Его можно использовать для проверки простых значений, таких как целые числа и символы.

Оператор

Case не является циклом, он не выполняет блок кода n раз. Вместо этого оболочка bash проверяет условие и контролирует ход выполнения программы.

В этой статье давайте рассмотрим команду bash case на 5 практических примерах.

Конструкция case в оболочке bash позволяет нам проверять строки на соответствие шаблонам, которые могут содержать символы подстановки.Оператор case в bash — это простейшая форма оператора if-then-else в bash.

Синтаксис оператора case в bash.

 case выражение в
    pattern1)
        заявления ;;
    шаблон2)
        заявления ;;
    ...
esac
 

Ниже приведены ключевые моменты операторов case в bash:

  • Оператор Case сначала расширяет выражение и пытается сопоставить его с каждым шаблоном.
  • Когда совпадение найдено, выполняются все связанные операторы до двойной точки с запятой (;;).
  • После первого совпадения регистр завершается статусом выхода последней выполненной команды.
  • Если совпадений нет, статус выхода обращения равен нулю.

Bash Пример 1. Отправка сигнала процессу

Следующий сценарий принимает номер сигнала и идентификатор процесса в качестве аргументов и отправляет сигнал заданному идентификатору процесса, используя имя сигнала.

Этот сценарий демонстрирует использование оператора case.

 $ cat signal.sh
#! / bin / bash

если [$ # -lt 2]
тогда
        echo "Использование: $ 0 Signalnumber PID"
        Выход
фи

case "$ 1" в

1) эхо "Отправка сигнала SIGHUP"
    kill -SIGHUP $ 2
    ;;
2) эхо "Отправка сигнала SIGINT"
    kill -SIGINT $ 2
    ;;
3) эхо "Отправка сигнала SIGQUIT"
    kill -SIGQUIT $ 2
    ;;
9) echo "Отправка сигнала SIGKILL"
   kill -SIGKILL $ 2
   ;;
*) echo "Сигнал номер $ 1 не обрабатывается"
   ;;
esac
 

В приведенном выше примере:

  • $ 1 и $ 2 — это номер сигнала и идентификатор процесса соответственно.
  • Используя команду kill, он отправляет соответствующий сигнал заданному идентификатору процесса.
  • Выполняет команду сна в течение нескольких секунд.
  • Необязательное последнее сравнение *) используется по умолчанию и соответствует чему угодно.

Использование вышеупомянутого сценария оболочки: узнать идентификатор процесса команды сна и отправить сигнал уничтожения этому идентификатору процесса, чтобы убить процесс.

 $ спать 1000

$ ps -a | grep sleep
23277 баллов / 2 00:00:00 сна

$./signal.sh 9 23277
Отправка сигнала SIGKILL

$ 1000 сна
Убит
 

Также обратитесь к нашей предыдущей статье об уничтожении процесса — 4 метода уничтожения процесса.

Пример случая Bash. 2. Соответствие шаблону в файле

В этом примере печатается количество строк, количество слов и удаляются строки, соответствующие заданному шаблону.

 $ cat fileop.sh
#! / bin / bash

# Проверить 3 аргумента #
если [$ # -lt 3]
тогда
        echo "Использование: имя файла шаблона параметра $ 0"
        Выход
фи

# Проверить, существует ли данный файл #
если [ ! -f $ 3]
тогда
        echo "Указанное имя файла \" $ 3 \ "не существует"
        Выход
фи

case "$ 1" в

# Подсчитать количество совпадений строк
-i) echo "Количество строк соответствует шаблону $ 2:"
    grep -c -i $ 2 $ 3
    ;;
# Подсчитать количество совпадений слов
-c) echo "Количество слов соответствует шаблону $ 2:"
    grep -o -i $ 2 $ 3 | wc -l
    ;;
# распечатать все совпавшие строки
-p) echo "Строки соответствуют шаблону $ 2:"
    grep -i $ 2 $ 3
    ;;
# Удаляем все строки, совпадающие с шаблоном
-d) echo "После удаления строки соответствует шаблону $ 2:"
    sed -n "/ $ 2 /! p" $ 3
    ;;
*) echo "Неверная опция"
   ;;
esac
 

Выполнение вышеуказанного скрипта показано ниже.

 $ cat текст
Vim - текстовый редактор, выпущенный Брамом Мооленааром в 1991 году для компьютера Amiga.
Название «Vim» является аббревиатурой от «Vi IMproved», поскольку Vim был создан как расширенная версия редактора vi со многими дополнительными функциями, предназначенными для помощи при редактировании исходного кода программы.
Хотя Vim изначально был выпущен для Amiga, с тех пор Vim был разработан как кроссплатформенный, поддерживающий многие другие платформы.
Это самый популярный редактор среди читателей Linux Journal.

Вывод регулярного выражения в Bash. После удаления строки совпадают с шаблоном Vim:

 $ ./fileop.sh -d Текст Vim
Это самый популярный редактор среди читателей Linux Journal.
 

Также обратитесь к нашей предыдущей статье о расширении Bash ~ и расширении {}.

Пример случая Bash 3. Найдите тип файла в расширении

В этом примере печатается тип файла (текст, Csource и т. Д.) На основе расширения имени файла.

 $ cat filetype.ш
#! / bin / bash
для имени файла в $ (ls)
делать
# Взять расширение, доступное в имени файла
        ext = $ {имя файла ## * \.}
        case "$ ext" в
        c) echo "$ filename: исходный файл C"
           ;;
        o) echo "$ filename: Объектный файл"
           ;;
        sh) echo "$ filename: сценарий оболочки"
            ;;
        txt) echo "$ filename: Текстовый файл"
             ;;
        *) echo "$ filename: Не обработано"
           ;;
esac
сделанный

$./filetype.sh
a.c: исходный файл C
b.c: исходный файл C
c1.txt: текстовый файл
fileop.sh: сценарий оболочки
obj.o: объектный файл
текст: Не обработано
t.o: объектный файл
 

Пример случая Bash 4. Запросить у пользователя ответ «Да» или «Нет»

В большинстве случаев при установке программного обеспечения во время лицензионного соглашения пользователю будет предложено ввести «да» или «нет». Следующий фрагмент кода — один из способов получить от пользователя ответ «да» или «нет».

 $ кот yorno.sh
#! / bin / bash

echo -n "Вы согласны с этим? [да или нет]:"
читать yno
case $ yno in

        [yY] | [yY] [Ee] [Ss])
                эхо "Согласен"
                ;;

        [nN] | [n | N] [O | o])
                echo "Не согласовано, установка невозможна";
                выход 1
                ;;
        *) echo "Неверный ввод"
            ;;
esac

$./yorno.sh
ты согласен с этим? [да или нет]: ДА
Согласовано
 

Если существует несколько шаблонов, разделенных вертикальной чертой, выражение может соответствовать любому из них, чтобы связанные операторы выполнялись. Шаблоны проверяются по порядку, пока не будет найдено совпадение; если ничего не найдено, ничего не происходит.

Также обратитесь к нашей предыдущей статье с 15 примерами массивов bash.

Пример случая Bash 5. Сценарий запуска

Сценарии запуска в каталоге /etc/init.d используют оператор case для запуска и остановки приложения.

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

 $ cat startpcapp
#! / bin / bash

case "$ 1" в
'Начало')
echo "Запуск приложения"
/ usr / bin / startpc
;;
'стоп')
echo "Остановка приложения"
/ usr / bin / stoppc
;;
'перезапуск')
echo "Использование: $ 0 [начало | остановка]"
;;
esac

$ ./startpcapp start
Запуск приложения
/ usr / bin / startpc запущен
 

Рекомендуемая литература

Bash 101 Hacks, Рамеш Натараджан .Большую часть времени я провожу в среде Linux. Так что, естественно, я большой поклонник командной строки и сценариев оболочки Bash. 15 лет назад, когда я работал над разными вариантами * nix, я писал много кода на оболочке C и оболочке Korn. Спустя годы, когда я начал работать в Linux в качестве системного администратора, я в значительной степени автоматизировал все возможные задачи с помощью сценариев оболочки Bash. Основываясь на моем опыте работы с Bash, я написал электронную книгу Bash 101 Hacks, которая содержит 101 практический пример как командной строки Bash, так и сценариев оболочки.Если вы думали об освоении Bash, сделайте себе одолжение и прочтите эту книгу, которая поможет вам взять под контроль командную строку Bash и сценарии оболочки.

Если вам понравилась эта статья, возможно, вам также понравится ..

.Заявление

CASE в Bash [Пример]

В следующей статье описывается основной синтаксис и простой пример использования оператора BASH CASE .

Оператор CASE — это простейшая форма оператора IF-THEN-ELSE в BASH.

Вы можете использовать оператор CASE , если вам нужен оператор IF-THEN-ELSE с большим количеством элементов ELIF .

С помощью оператора BASH CASE вы берете какое-то значение один раз, а затем проверяете его несколько раз.

Базовый синтаксис оператора CASE

 case $ переменная в
     узор-1)
          команды
          ;;
     узор-2)
          команды
          ;;
     узор-3 | узор-4 | узор-5)
          команды
          ;;
     узор-N)
          команды
          ;;
     *)
          команды
          ;;
esac 

Пример сценария BASH с оператором CASE

 #! / Bin / bash
printf 'Какой дистрибутив Linux вы знаете? '
читать DISTR

case $ DISTR в
     убунту)
          echo "Я знаю! Это операционная система, основанная на Debian."
          ;;
     centos | rhel)
          echo "Эй! Это моя любимая серверная ОС!"
          ;;
     окна)
          echo "Очень смешно ..."
          ;;
     *)
          echo "Хм, кажется, я никогда им не пользовался."
          ;;
esac 

Запустите сценарий следующим образом:

 $ ./testcase.sh
Какой дистрибутив Linux вы знаете?  сентос 
Привет! Это моя любимая серверная ОС!
$ ./testcase.sh
Какой дистрибутив Linux вы знаете?  Rhel 
Привет! Это моя любимая серверная ОС!
$./testcase.sh
Какой дистрибутив Linux вы знаете?  убунту 
Я тоже это знаю! Это операционная система, основанная на Debian.
$ ./testcase.sh
Какой дистрибутив Linux вы знаете?  пффф 
Хм, кажется, никогда не пользовался. 

.

Примеры операторов сценария Bash

Изложение дела

Примеры операторов сценария Bash

Заявления по делу

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

Основной синтаксис команды case следующий:

  
#
# Заявление о случае
#

case $ test_variable в
     матч2)
        команды
        ....
        ....
        ;;
     матч3)
        команды
        ....
        ....
        ;;
     match4)
        команды
        ....
        ....
        ;;
     *)
esac
   

Синтаксис оператора с несколькими регистрами

  
#
# Заявление о случае
#

case $ test_variable в
     match2 | match3)
        команды
        ....
        ....
        ;;
     match4 | match5)
        команды
        ....
        ....
        ;;
     match5 | match6)
        команды
        ....
        ....
        ;;
     *)
esac
   

В приведенных выше примерах наша переменная $ test_variable сравнивается с нашими шаблонами соответствия, пока не будет найдено совпадение. Каждый оператор case начинается с « case » и заканчивается « esac ». После каждого раздела команд у вас должно быть две точки с запятой « ;; ». Запись « *) » — это регистр по умолчанию, который соответствует чему угодно. Если вы используете эту опцию, она должна быть расположена внизу ваших операторов case.

Примеры заявлений

В приведенном ниже примере мы сначала проверяем наличие нулевой записи с помощью теста [-z $ 1] . Если вы не введете значение, сценарий завершится. Если значение передано, оно проверяется на соответствие шаблонам в нашем операторе case. Если введенное значение не соответствует какому-либо шаблону, то соответствие по умолчанию « *) » используется для выдачи сообщения «не распознано».

  
#! / bin / bash
#
# Заявление о случае
#
если [-z $ 1]; тогда
   echo "Вы должны указать название модели.например Фиеста »
   Выход
фи

футляр $ 1 в
     фиеста | Фиеста | ФИЕСТА)
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Ford"
        ;;
     mondeo | Mondeo | MONDEO)
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Ford"
        ;;
     Астра | Астра | АСТРА)
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Vauxhall"
        ;;
     Знаки | Знаки | Знаки отличия)
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Vauxhall"
        ;;
     *)
        echo "Извините, машина $ 1 не распознается"
esac
   

Вывод из приведенного выше скрипта

  
john @ john-desktop: ~ / scripts $./case2.sh Fiesta
Вы вошли в Fiesta
Модель Fiesta производится компанией Ford.
john @ john-desktop: ~ / scripts $ ./case2.sh fiesta
Вы вошли в фиесту
Модель Fiesta производится компанией Ford.
john @ john-desktop: ~ / scripts $ ./case2.sh FIESTA
Вы вошли в ФИЕСТА
Модель FIESTA производится компанией Ford.
john @ john-desktop: ~ / scripts $ ./case2.sh Astra
Вы вошли в Астру
Модель Astra производится компанией Vauxhall.
john @ john-desktop: ~ / scripts $ ./case2.sh Lotus
Извините, машина Lotus не распознается
john @ john-desktop: ~ / scripts $./case2.sh
Вы должны указать название модели. например Фиеста
   

Сопоставление с образцом в смешанном регистре

Единственная проблема с сопоставлением шаблонов заключается в том, что они должны совпадать. В приведенных выше примерах мы использовали различные комбинации для наших рисунков «фиеста, фиеста и FIESTA». Это было бы хорошо, если бы пользователь не ввел «fIesta or fiestA». Чтобы обойти эту проблему, можно использовать несколько решений. Один из способов — использовать команду перевода « tr «:

Теперь наш сценарий содержит строку, переводящую нашу запись в нижний регистр: newtest = $ (echo «$ 1» | tr -s ‘[: upper:]’ ‘[: lower:]’)

Затем мы модифицируем наш case-тест, чтобы использовать новую переменную $ newtest.Наши шаблоны необходимо изменить так, чтобы они ссылались только на имя в нижнем регистре, «fiesta, mondeo, astra или insignia».

  
#! / bin / bash
#
# Заявление о случае
#
если [-z $ 1]; тогда
   echo "Необходимо указать название модели. например, Fiesta"
   Выход
фи

# Переводим любые символы верхнего регистра в нижний регистр, чтобы упростить наш тест

newtest = $ (echo "$ 1" | tr -s '[: upper:]' '[: lower:]')


case $ newtest in
     фиеста)
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Ford"
        ;;
     мондео)
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Ford"
        ;;
     астра)
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Vauxhall"
        ;;
     знаки отличия)
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Vauxhall"
        ;;
     *)
        echo "Извините, машина $ 1 не распознается"
esac

   

Альтернативным способом было бы изменить сопоставление с шаблоном следующим образом (это могло бы занять много времени, если бы было много записей)

  
#! / bin / bash
#
# Заявление о случае
#
если [-z $ 1]; тогда
   echo "Вы должны указать название модели.например Фиеста »
   Выход
фи

футляр $ 1 в
     [fF] [Ii] [Ee] [Ss] [Tt] [Aa])
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Ford"
        ;;
     [Мм] [Oo] [Nn] [Dd] [Ee] [Oo])
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Ford"
        ;;
     [Aa] [Ss] [Tt] [Rr] [Aa])
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Vauxhall"
        ;;
     [Ii] [Nn] [Ss] [Ii] [Gg] [Nn] [Ii] [Aa])
        echo "Вы ввели 1 доллар"
        echo "Модель за $ 1 произведена компанией Vauxhall"
        ;;
     *)
        echo "Извините, машина $ 1 не распознается"
esac
   

.

Как использовать оператор case в Bash — Linux Hint

Операторы case в Bash похожи на операторы if-else, но проще и проще. Это помогает сопоставить одну переменную с несколькими значениями. Он используется, когда вам требуются операторы IF-else с несколькими операторами Elif … Он очень похож на оператор switch в C, однако оператор case bash не продвигается вперед после сопоставления с шаблоном

В этой статье мы объясним, как использовать оператор case в Bash на примере в ОС Linux.

Синтаксис оператора case в bash

Вот синтаксис оператора case в bash:

Синтаксис:

case $ переменная в шаблоне
-1)
команд
;;
шаблон-2)
команды
;;
шаблон-3)
команды
;;
шаблон-N)
команд
;;
*)
команд
;;
esac

  • Оператор case начинается с case и заканчивается esac
  • «)» используется для завершения шаблона.Чтобы разделить несколько шаблонов, «|» используется оператор, как показано ниже:

переменная case $ в
паттерн-1 | шаблон-2)
команды
….
….
;;
узор-3 | шаблон-4)
команды
….
….
;;

  • Шаблон с командами известен как предложение, и каждое предложение заканчивается на (;;).
  • Символ звездочки * может использоваться для определения регистра по умолчанию.
  • Оператор case в Bash сначала сопоставляет входную переменную $ с различными шаблонами.Если шаблон совпадает, то будет выполнен соответствующий набор команд до двойной точки с запятой (;;).

Пример 1:

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

Чтобы использовать этот сценарий, создайте простой текстовый файл; назовите его.Sh расширение файла Добавьте в него следующий скрипт и сохраните его. Затем назначьте этот файл для выполнения разрешений, выполнив следующую команду в Терминале:

$ sudo chmod 777 filename.sh

Чтобы выполнить этот файл bash, просто запустите ./ с указанием имени файла bash следующим образом:

Когда вы выполните сценарий, вам будет предложено ввести название месяца в качестве входных данных. Если название месяца совпадает, будет отображаться соответствующее событие в этом конкретном месяце, в противном случае будет отображаться сообщение «Соответствующая информация не найдена».

Обратите внимание, что «shopt -s nocasematch» используется для сопоставления шаблона независимо от его регистра.

shopt -s nocasematch

echo «Введите название месяца»
прочтите месяц
case $ месяц в
января)
echo «24 января, международный день образования».
;;
февраля)
эхо «20 февраля Всемирный день социальной справедливости».
;;
марта)
эхо «Международный женский день 8 марта».
;;
апрель)
эхо «7 апреля, Всемирный день здоровья»
;;
May)
echo «15 мая Международный день семьи»
;;
июнь)
echo «20 июня Всемирный день беженцев»
;;
июль)
эхо «11 июля Всемирный день народонаселения»
;;
*)
echo «Соответствующая информация не найдена»
;;
esac

Пример 2:

Следующий пример касается кассового отчета bash, в котором пользователя просят ввести название страны.Если этот ввод соответствует определенным шаблонам в сценарии, будет выполнена соответствующая команда echo. Команда echo отобразит информацию о столице этой конкретной страны.

Чтобы использовать этот сценарий, следуйте тому же методу, который описан в примере выше. После этого запустите сценарий, и вам будет предложено ввести название страны в качестве входных данных. Если название страны совпадает с предопределенными названиями стран, будет отображаться название столицы этой страны, в противном случае будет отображаться сообщение «Информация недоступна».

#! / bin / bash
shopt -s nocasematch
echo -n «Введите название страны:»
прочтите страну

echo -n «Столица $ country:»
case $ country в
Пакистане)
echo — n «Исламабад»
;;
Fiji)
echo -n «Suva»
;;
UK | «Соединенное Королевство»)
echo -n «Лондон»
;;
Турция)
echo -n «Анкара»
;;
USA)
echo -n «Вашингтон, округ Колумбия»
;;
*)
echo -n «Информация недоступна»
;;
esac
echo «»

Операторы case в Bash упрощают чтение и понимание сценария bash.В этой статье мы рассмотрели, как писать и использовать операторы case в bash. Теперь вы можете легко и просто написать многоуровневый оператор if-else, используя операторы case.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *