Создание и выполнение сценариев 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.