Вы когда-нибудь сталкивались с такими терминами, как сценарии bash, программирование оболочки, файл bash, shebang, или когда-нибудь слышали, чтобы кто-нибудь говорил о том, как писать код на bash, это вообще язык программирования? Или видели файлы со странным расширением .sh и никогда не заглядывали в них? Вы знаете, что они важны, но как и как их использовать? Давайте попробуем покопаться и понять, что это за чертовщина и как на самом деле это использовать!

Краткое введение в сценарии оболочки

Что такое сценарий?

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

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

Давайте посмотрим на очень простой пример сценария оболочки:

#!/bin/bash
echo “Hello World!”

А как запустить этот скрипт?

$ chmod 755 script.sh
$ ./script.sh
Hello World!

Помните, что каждый сценарий оболочки начинается с shebang.

Что, черт возьми, такое «shebang»?

В приведенном выше примере скрипта первая строка выглядит как #! / Bin / bash, на словах вы бы произнесли это как косая черта с резким ударом вперед. -bin-forward slash-bash (некоторые люди называют! ударом.) Следовательно, «#!» можно произносить как острый-удар , который постепенно превратился в shebang. Да это оно.

Примечание. Для каждой строки, кроме shebang, если она начинается со знака решетки (#), это считается комментарием.

Когда первая строка сценария начинается с shebang, то, что следует за shebang, используется в качестве интерпретатора для команд, перечисленных в сценарии. «/ Bin / bash» в приведенном выше примере. Другими примерами могут быть: «bin / csh», «bin / ksh /,« bin / zsh ».

Вы когда-нибудь слышали, что python - это язык сценариев? Да, это так, и вы также можете запускать скрипты с Python в качестве интерпретатора. Взгляните на пример ниже:

#!/bin/python
print "Hello World, Using a python script."

И запускаем его:

$ chmod 755 hello.py
$ ./hello.py
Hello World, Using a python script.

Давай разберемся

Давайте сделаем нечто большее, чем просто печать Hello World! и примените здесь некоторые базовые концепции программирования, такие как сохранение значения в переменной и так далее.

Установка значений для переменных и использование этих значений

Правила определения переменной:

  • Переменные в сценариях оболочки чувствительны к регистру.
  • По соглашению, переменные пишутся в верхнем регистре.
  • Не забудьте не оставлять пробелов до и после знака =.
  • Имена переменных могут содержать числа, буквы и символы подчеркивания.
  • Хорошим примером может быть: VARIABLE_NAME = «какое-то значение».
#!/bin/bash
FAV_FRUIT="Apple"
echo "My garden is full of $FAV_FRUIT trees."

Вместо $ FAV_FRUIT вы также можете передать значения переменных как $ {FAV_FRUIT}. Вы можете использовать синтаксис фигурных скобок, если хотите объединить две строки, например, если вы хотите вывести «I Love Apple s», тогда вы не сможете передать значение с завершающим « s »в конце. Вы должны передать значение следующим образом:

echo "I Love ${FAV_FRUIT}s" 

Арифметические операторы

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

arg1 -eq arg2 True if arg1 is equal to arg2.
arg1 -ne arg2 True if arg1 is not equal to arg2.
arg1 -lt arg2 True if arg1 is less than arg2.
arg1 -le arg2 True if arg1 is less than or equal to arg2.
arg1 -gt arg2 True if arg1 is greater than arg2.
arg1 -ge arg2 True if arg1 is greater than or equal to arg2.

Принятие решений - оператор if

Теперь, когда у вас есть базовое представление о том, как проверить наличие условия, вы можете объединить результаты с оператором if для запуска команды (или набора команд), если какое-либо условие выполнено.

Синтаксис оператора if следующий:

if [condition-is-met]
then
  command 1
  command 2
  command N
fi

Оператор if начинается со слова «if» и сопровождается проверкой, следующая строка содержит слово «then». Далее идет команда или серия команд, которые будут выполнены, если условие выполнено. Наконец, условие if заканчивается словом «fi», которое просто «если» написано в обратном порядке.

Вы можете поместить команды else if и else сразу после команд for if следующим образом:

if [condition-is-met]
then
  command 1
  command 2
  command N
elif [condition-is-met]
then
  command X
else
  command Y
fi

Для петли

Вы можете выполнить действие со списком элементов, используя цикл for, а синтаксис цикла for в сценарии оболочки выглядит следующим образом:

for VARIABLE_NAME in ITEM_1 ITEM_N
do
  command 1
  command 2
  command N
done

Первая строка цикла for начинается со слова «for», за которым следует имя переменной, а затем список элементов. Следующая строка содержит слово «do», после чего вы должны поместить операторы, которые хотите выполнить, и, наконец, завершить цикл for словом «done» в следующей строке.

Под капотом происходит то, что первый элемент назначается переменной, и набор команд выполняется для этой переменной, затем следующий элемент в списке назначается переменной, и снова эти команды выполняются для этой переменной. Это продолжается до тех пор, пока цикл не достигнет последнего элемента в списке.

Принятие пользовательского ввода (STDIN)

Если вы хотите принять STDIN, используйте команду read. Помните, что STDIN обычно исходит от человека, набирающего на клавиатуре, но он также может поступать из других источников, таких как вывод другой команды или набора команд. Синтаксис для чтения следующий:

 read -p "PROMPT" VARIABLE

PROMPT - это в основном то, что вы хотите показать пользователю. Пример ниже:

read -p "Enter your name: " NAME
echo "You are registered, $NAME"

Позиционные параметры

Позиционные параметры - это переменные, которые содержат содержимое командной строки, переменные: $ 0, $ 1, $ 2, $ 3 …… .. $ 9. Сам этот сценарий хранится в $ 0, первый параметр хранится в $ 1, второй - в $ 2 и так далее.

Взгляните на этот пример:

$ script.sh parameter1 parameter2 parameter3

Здесь переменные и их значения следующие:

$0 : "script.sh"
$1 : "parameter1"
$2 : "parameter2"
$3 : "parameter3"

Для доступа ко всем элементам командной строки используйте специальную переменную $ @.

Функции

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

Есть два способа определить функцию в сценарии оболочки:

Первый способ:

function function-name() {
  #code goes here
}

Второй способ:

funtion-name() {
  #code goes here
}

Чтобы вызвать или выполнить функцию, просто укажите ее имя в любой строке скрипта. После определения он действует как любая другая команда, которую вы можете использовать в сценарии оболочки.

Примечание. При вызове функции не используйте скобки.

Пример определения и вызова функции:

#!/bin/bash
function hello() {
  echo "Hello!"
}
hello

Когда вы запускаете приведенный выше сценарий, на экране отображается слово "привет".

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

Надеюсь, это было полезно. Нажмите кнопку хлопка 👏🏽, если вы сочли это полезным / полезным. Не стесняйтесь писать комментарии.

Удачного кодирования!