Создание и выполнение сценариев Bash: утилита bash.

Создание и выполнение сценариев Bash: утилита bash.

Life-Hack - Linux/Хакинг/Хакер/ИБ/Osint

Многие новички путают сценарии bash с реальным программированием. Основная цель написания сценариев в bash — связать множество команд вместе, эффективно выполняя длинные сложные вещи без необходимости записывать каждую мелочь в оболочке терминала. Если вы пытаетесь серьезно программировать на Bash, остановитесь и подумайте о реальном языке программирования, используемом в Linux, например Python.

Продолжаем разобраться с основами написания bash сценариев.

У всех случалась ситуация, когда скрипт или программа были написаны и долгое время лежали без дела. Спустя несколько месяцев, откопав такую находку бывает трудно вспомнить, что к чему. Добавление комментариев к коду является неотъемлемой частью любого языка программирования и скрипты на bash не исключение. Комментарии не анализируются сценарием во время выполнения. Читатель может правильно понять любой код, если код хорошо прокомментирован. Вы можете добавить комментарий несколькими способами в сценарии bash.

Создайте файл bash_comment.sh со следующим сценарием, чтобы знать, как использовать комментарий bash. Здесь символ «#» используется для добавления однострочного комментария, а одинарная кавычка (‘) с «:» используется для добавления многострочного комментария.

#!/bin/bash
#Take a number as input
echo "Enter a number"
read a
: '
Check the input number is
less than 10 or greater than 10 or equal to 10
'
if [[ $a -lt 10 ]]
then
echo "The number is less than 10"
elif [[ $a -gt 10 ]]
then
echo "The number is greater than 10"
else
echo "The number is equal to 10"
fi

Чтобы запустить сценарий оболочки, откройте терминал и выполните:

bash bash_comment.sh

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

Оба способа запуска скриптов работают очень хорошо. При этом использование ./filename — наихудший способ, поскольку скрипты часто не запускаются, если у сценария bash нет правильных разрешений. Установите разрешения с помощью:

chmod +x bash_comment.sh

Когда блок кода должен выполняться несколько раз в сценарии, для выполнения задачи используется функция. Вам нужно будет вызывать функцию по имени только тогда, когда сценарий, определенный в функции, должен выполняться много раз, а не добавлять один и тот же сценарий несколько раз. Начальная и конечная первая скобка используется с именем функции для объявления функции в сценарии bash. Функцию можно вызвать только по имени функции в bash. Bash не поддерживает аргумент функции, как другой стандартный язык программирования. Но значение может быть передано в функцию bash другим способом, который показан в этом разделе. Значение может быть возвращено из функции с оператором return или без использования оператора return.

Создайте файл func.sh со следующим сценарием, чтобы узнать, как функции могут быть объявлены и вызваны в сценарии bash. В скрипте объявлены три функции. Первая функция объявляется для вывода простого сообщения «Программирование на Bash». Вторая функция объявляется для присвоения строкового значения в переменной $return_str, которая будет печатать «Изучите программирование bash» после вызова функции. Третья функция объявляется для чтения значения аргумента в виде радиуса окружности, которое будет предоставлено во время вызова функции. Здесь local используется для чтения значения аргумента. Эта функция рассчитает площадь круга на основе значения радиуса по формуле πr2 и распечатает вычисленное значение площади.

#!/bin/bash
#Declare a simple function
function print_message()
{
echo "Программирование на Bash"
}
#Declare a function to return a string value
function ret_strdata()
{
#Initialize the variable with string value
return_str="Изучите программирование bash"
}
#Declare a function to read argument value
function calculate_area()
{
#Read the passed argument value
local radius=$1
area=$(echo $radius*$radius*3.14 | bc)
#Print the area value
echo "Area of the circle is $area"
}
#Call the function to print a simple message
print_message
#Call the function that will assign a string value in a variable
ret_strdata
#Print the value of the variable
echo $return_str
#Read the radius value
echo "Enter the radius value"
read rad
#Call the function with radius value
calculate_area $rad

В bash есть полезная команда для создания простого меню, которая называется командой `select`. С помощью этой команды можно создавать различные типы меню. Определенный список данных используется для создания меню этой командой. Создайте файл bash со следующим кодом, чтобы увидеть использование команды `select` для создания меню. В этом примере список из пяти элементов будет напечатан в виде меню и предложит пользователю выбрать любой язык из списка. Выбранное значение будет сохранено в переменной $language, которая будет напечатана позже путем объединения с другой строкой. Сценарий будет постоянно запрашивать выбор языка, пока пользователь не нажмет 6, чтобы выйти из сценария.

#!/bin/bash

#Print message for the user
echo "Select your favorite language"
# Define the list of a menu item
select language in C# Java PHP Python Bash Exit
do
#Print the selected value
if [[ $language == "Exit" ]]
then
exit 0
else
echo "Selected language is $language"
fi
done

Иногда нам нужно указать входные значения при выполнении скрипта из командной строки. Эту задачу можно выполнить двумя способами в bash. Один из способов — использовать переменные-аргументы, а другой — использовать функцию getopts. В этом разделе показано чтение входных данных командной строки из терминала с использованием переменной аргумента.

Создайте файл cl1.sh со следующим сценарием, чтобы увидеть использование чтения значения аргумента командной строки. Этот сценарий будет считывать три аргумента командной строки, которые будут храниться в переменных: $operand1, $operand2 и $operator. Для правильного выполнения сценария значения первого и третьего аргумента должны быть числом, а значение второго аргумента должно быть любым из четырех арифметических операторов («+», «-», «/», «x»). Оператор if проверит значение $operator, выполнит операцию на основе оператора и напечатает значение.

#!/bin/bash

#Print the argument variables
echo "Argument values are: $1 $2 $3"
# Store argument values
operand1=$1
operand2=$3
operator=$2
#Check the 2nd command argument value to do the arithmetic operation
if [[ $operator == '+' ]]
then
((result=$operand1+$operand2))
elif [[ $operator == '-' ]]
then
((result=$operand1-$operand2))
elif [[ $operator == 'x' ]]
then
((result=$operand1*$operand2))
elif [[ $operator == '/' ]]
then
((result=$operand1/$operand2))
fi
# print the result
echo -e "Result is = $result"

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

Report Page