Создание и выполнение сценариев BASH

Имена сценариев

По соглашению об именах сценарии bash заканчиваются на .sh. Однако сценарии bash могут прекрасно работать без расширения sh.

Shebang

Скрипты Bash начинаются с шебанга. Шебанг(Shebang) — это комбинация bash # и bang ! за которым следует путь оболочки bash. Это первая строка скрипта. Шебанг говорит оболочке выполнить его через оболочку bash. Shebang — это просто абсолютный путь к интерпретатору bash.

Ниже приведен пример оператора шебанг.

#!/bin/bash

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

which bash

Первый bash-скрипт

Наш первый скрипт предлагает пользователю ввести путь. В свою очередь он вернет все содержимое указанного каталога.

Создайте файл с именем show_all.sh с помощью команды vi. Вы можете использовать любой редактор по вашему выбору.

vi show_all.sh

Добавьте следующие команды в свой файл и сохраните его:

#!/bin/bash
echo "сегодня " `date`

echo -e "\n введите путь к директории:"
read path_to

echo -e "\n ваша директория содержит файлы и папки:"
ls $path_to

Скрипт отобразит текущую дату и содержимое предоставленного пользователем каталога.

Давайте более подробно рассмотрим сценарий построчно. Я снова привожу тот же сценарий, но на этот раз с номерами строк.

#!/bin/bash
echo "Сегодня " `date`

echo -e "\n введите путь к директории:"
read path_to

echo -e "\n ваша директория содержит файлы и папки:"
ls $path_to
  • Строка #1: Шебанг (#!/bin/bash) указывает на путь к оболочке bash.
  • Строка #2: команда echo отображает текущую дату и время на терминале. Обратите внимание, что дата указана в обратных кавычках.
  • Строка #4: мы хотим, чтобы пользователь ввел правильный путь.
  • Строка #5: Команда чтения считывает ввод и сохраняет его в переменной path_to.
  • строка #8: Команда lh берет переменную с сохраненным путем и отображает текущие файлы и папки.

Выполнение bash-скрипта

Чтобы сделать скрипт исполняемым, назначьте права на выполнение своему пользователю с помощью команды:

chmod u+x show_all.sh

где,

  • chmod изменяет владельца файла для текущего пользователя u:.
  • +x добавляет права на выполнение текущему пользователю. Это означает, что пользователь, являющийся владельцем, теперь может запустить сценарий.
  • show_all.sh — это файл, который мы хотим запустить.

Вы можете запустить скрипт любым из указанных способов:

sh show_all.sh
bash show_all.sh
./show_all.sh

Как работает скрипт:

Основы Bash скриптов

Комментарии в сценариях bash

Комментарии начинаются с # в сценариях bash. Это означает, что любая строка, начинающаяся с #, является комментарием и будет игнорироваться интерпретатором.

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

Вот примеры комментариев:

# This is an example comment
# Можно комментить на русском
# These lines will be ignored by the interpreter

Переменные и типы данных в Bash

Переменные позволяют хранить данные. Вы можете использовать переменные для чтения, доступа и управления данными во всем сценарии.

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

В Bash вы можете использовать и устанавливать значения переменных следующими способами:

  1. Назначьте значение напрямую:
country=Russia

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

same_country=$country

Чтобы получить доступ к значению переменной, добавьте $ к имени переменной.

admin@user-new:/$ country=Russia
admin@user-new:/$ echo $country
Russia<br>admin@user-new:/$ new_country=$country
admin@user-new:/$ echo $new_country
Russia

Соглашения об именах переменных

В сценариях Bash следующие соглашения об именах переменных:

  1. Имена переменных должны начинаться с буквы или символа подчеркивания ().
  2. Имена переменных могут содержать буквы, цифры и символы подчеркивания ().
  3. Имена переменных чувствительны к регистру.
  4. Имена переменных не должны содержать пробелов или специальных символов.
  5. Используйте описательные имена, отражающие назначение переменной.
  6. Избегайте использования зарезервированных ключевых слов, таких как if, then, else, fi и т. д., в качестве имен переменных.

Вот несколько примеров допустимых имен переменных в Bash:

name
count
_var
myVar
MY_VAR

А вот несколько примеров недопустимых имен переменных:

2ndvar (начинается с цифры)
my var (содержит пробел)
my-var (содержит дефис)

Соблюдение этих соглашений об именах помогает делать сценарии Bash более читабельными и простыми в использовании.

Ввод и вывод в Bash-скриптах

Обработка входных данных

В этом разделе мы обсудим некоторые методы ввода данных в наши сценарии.

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

Мы можем прочитать пользовательский ввод с помощью команды чтения.

#!/bin/bash<br>
echo -e "\n Enter your name:"
read the_name

echo -e "\n welcome to Medium $the_name"

вывод:

2. Чтение из файла

Этот код считывает каждую строку из файла с именем input.txt и выводит ее на терминал. Мы изучим циклы while позже в этой статье.

while read line
do
  echo $line
  done < input.txt

3. Аргументы командной строки

В скрипте или функции bash $1 обозначает переданный начальный аргумент, $2 обозначает переданный второй аргумент и так далее.

Этот сценарий принимает имя в качестве аргумента командной строки и печатает персонализированное приветствие.

echo "Hello, $1!"

Мы передаем скрипту clockber как аргумент.

#!/bin/bash
echo "Hello, $1!"

вывод:

Отображение вывода

Здесь мы обсудим некоторые методы получения вывода из скриптов.

  1. Печать в терминал:
echo "Hello, World!"

Этой командой напечатаем текст “Hello, World!” в терминале.

2. Запись в файл:

echo "let's write text." > output.txt

Эта команда запишет текст “let’s write text.” в файл с именем output.txt. Обратите внимание, что оператор > перезапишет файл, если в нем уже есть содержимое.

3. Добавление в файл:

echo "More text." >> output.txt

Добавляем текст “More text.” в конец файла output.txt.

4. Перенаправление вывода:

ls > files.txt

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

Основные команды Bash (echo, read и т. д.)

Вот список некоторых наиболее часто используемых команд bash:

  1. cd: Изменение директории на другую.
  2. ls: Отображение содержимого в текущей директории.
  3. mkdir: Создание новой директории.
  4. touch: Создать новый файл.
  5. rm: Удаление файла или директории.
  6. cp: Копирование файла или директории.
  7. mv: Перемещение или переименование файла или директории.
  8. echo: Печать текста в терминал.
  9. cat: Читает данные из файла и выводит их на экран.
  10. grep: Поиск в файлах.
  11. chmod: Изменение прав доступа к файлу или директории.
  12. sudo: Запуск команд с правами администратора.
  13. df: Отображение дискового пространства.
  14. history: Отображение истории предыдущих комманд.
  15. ps: Отображение информации о запущенных процессах.

Условные операторы (if/else)

Выражения, дающие логический результат, истинный или ложный, называются условиями. Существует несколько способов оценки условий, включая ifif-elseif-elif-else и вложенные условные операторы.

Синтаксис:

if [[ condition ]];
then
 statement
 elif [[ condition ]]; 
  statement 
  else
   do this by default
   fi

Можно использовать логические операторы, такие как AND -aи OR -o, чтобы делать сравнения, которые имеют большее значение.

if [ $a -gt 60 -a $b -lt 100 ]

Давайте рассмотрим пример сценария Bash, который использует операторы ifif-elseif-elif-else, чтобы определить, является ли введенное пользователем число положительным, отрицательным или нулевым:

#!/bin/bash

echo "Please enter a number: "
read num
if [ $num -gt 0 ]; then
  echo "$num is positive"
  elif [ $num -lt 0 ]; 
  then
    echo "$num is negative"
    else
      echo "$num is zero"
      fi

Сначала скрипт предлагает пользователю ввести число. Затем он использует оператор if, чтобы проверить, больше ли число, чем 0. Если это так, сценарий выводит, что число положительное. Если число не больше 0, скрипт переходит к следующему оператору, который является оператором if-elif. Здесь скрипт проверяет, меньше ли число 0. Если да, то скрипт выводит отрицательное число. Наконец, если число не больше 0 и не меньше 0, скрипт использует оператор else для вывода того, что число равно нулю.

Циклы и ветвление в Bash

Цикл While

Циклы while проверяют условие в цикле, пока это условие остается true. Для управления циклом принято использовать счетчики.

В приведенном ниже примере (( i += 1 )) — это оператор счетчика, который увеличивает значение i. Цикл будет выполняться ровно 10 раз.

#!/bin/bash<br>i=1<br><strong>while</strong> [[ $i -le 10 ]] ; <strong>do</strong><br>   echo "$i"<br>  (( i += 1 ))<br><strong>done</strong>

Цикл For

Цикл for, как и цикл while, позволяет выполнять операторы определенное количество раз. Каждый цикл отличается своим синтаксисом и использованием.

В приведенном ниже примере цикл повторяется 5 раз.

#!/bin/bash<br><br><strong>for</strong> i <strong>in</strong> {1..5}<br><strong>do</strong><br>    echo $i<br><strong>done</strong>

Оператор Case

В Bash операторы case используются для сравнения заданного значения со списком шаблонов и выполнения блока кода на основе первого совпавщего шаблона. Синтаксис оператора case в Bash следующий:

case expression <strong>in</strong><br>    pattern1)<br>        # code to execute if expression matches pattern1<br>        ;;<br>    pattern2)<br>        # code to execute if expression matches pattern2<br>        ;;<br>    pattern3)<br>        # code to execute if expression matches pattern3<br>        ;;<br>    *)<br>        # code to execute if none of the above patterns match expression<br>        ;;<br><strong>esac</strong>

Здесь expression— это значение, которое мы хотим сравнить, а pattern1pattern2pattern3 и т. д. — это шаблоны, с которыми мы хотим его сравнить.

Двойная точка с запятой “;;” отделяет каждый блок кода для выполнения для каждого шаблона. Звездочка “*” представляет случай по умолчанию, который выполняется, если ни один из указанных шаблонов не соответствует выражению.

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

fruit="apple"case in    "apple")        echo "This is a red fruit."        ;;    "banana")        echo "This is a yellow fruit."        ;;    "orange")        echo "This is an orange fruit."        ;;    *)        echo "Unknown fruit."        ;;esac

В данном примере, поскольку значение “fruit” является “apple”, чему соответствует первый шаблон и блок кода, следовательно в терминале мы увидем “This is a red fruit.”. Если бы значением “fruit” было “banana”, второй шаблон соответствовал бы и блоку кода, который повторяет “This is a yellow fruit.”. будет выполняться и так далее. Если значение “fruit”не соответствует ни одному из указанных шаблонов, выполняется случай по умолчанию, который повторяет “Unknown fruit.”.

Планирование сценариев с помощью Сron

Cron — мощная утилита для планирования заданий, доступная в Unix-подобных операционных системах. Настроив cron, вы можете настроить автоматические задания для запуска ежедневно, еженедельно, ежемесячно или в определенное время. Возможности автоматизации, предоставляемые cron, играют решающую роль в системном администрировании Linux.

Ниже приведен синтаксис для планирования crons:

# Cron job example* * * * * sh /path/to/script.sh

Здесь * представляют собой минуты (минуты), часы (часы), день (дни), месяцы и дни недели соответственно.

Ниже приведены несколько примеров планирования заданий cron.

schedule    description                                          example0 0 * * *   Run a script at midnight every day                   0 0 * * * /path/to/script.sh*/5 * * * * Run a script every 5 minutes                         */5 * * * * /path/to/script.sh0 6 * * 1-5 Run a script at 6 am from Monday  to Friday          0 6 * * 1-5 /path/to/script.sh0 0 1-7 * * Run a script on the first 7 days of every month      0 0 1-7 * * /path/to/script.sh0 12 1 * *  Run a script on the first day of every month at noon

Использование crontab
Утилита crontab используется для добавления и редактирования заданий cron.

crontab -l перечисляет уже запланированные сценарии для конкретного пользователя.

Вы можете добавлять и редактировать cron через crontab -e.

Вы можете прочитать больше о работе с Cron здесь.

Как отлаживать и устранять неполадки Bash-скриптов

Отладка и устранение неполадок являются важными навыками для любого Bash-скриптора. Хотя сценарии Bash могут быть невероятно мощными, они также могут быть подвержены ошибкам и неожиданному поведению. В этом разделе мы обсудим некоторые советы и методы по отладке и устранению неполадок сценариев Bash.

Установите параметр set -x

Один из наиболее полезных способов отладки сценариев Bash — установка параметра set -x в начале сценария. Эта опция включает режим отладки, в котором Bash печатает каждую команду, которую он выполняет, на терминал, перед которой ставится знак +. Это может быть невероятно полезно для определения того, где в сценарии возникают ошибки.

#!/bin/bashset -x# Your script goes here

Проверьте код выхода

Когда Bash обнаруживает ошибку, он устанавливает код выхода, который указывает характер ошибки. Вы можете проверить код выхода самой последней команды, используя $? переменная. Значение 0 указывает на успех, а любое другое значение указывает на ошибку.

#!/bin/bash# Your script goes hereif [ $? -ne 0 ]; then    echo "Error occurred."fi

Используйте операторы echo

Другой полезный метод отладки скриптов Bash — вставка echo-оператора в ваш код. Это может помочь вам определить, где возникают ошибки и какие значения передаются в переменные.

#!/bin/bash# Your script goes hereecho "Value of variable x is: " class="formula inline">x"\# More code goes here

Используйте опцию set -e

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

#!/bin/bashset -e
# Your script goes here

Устранение неполадок Cron путем проверки log журналов

Мы можем устранять неполадки crons с помощью файлов журнала. Журналы ведутся для всех запланированных заданий. Вы можете проверить и проверить в журналах, выполнялось ли конкретное задание должным образом или нет.

Для Ubuntu/Debian вы можете найти cronlogs по адресу:

/var/log/syslog

Расположение отличается для других дистрибутивов.

Файл журнала заданий cron может выглядеть следующим образом:

2022-03-11 00:00:01 Task started2022-03-11 00:00:02 Running script /path/to/script.sh2022-03-11 00:00:03 Script completed successfully2022-03-11 00:05:01 Task started2022-03-11 00:05:02 Running script /path/to/script.sh2022-03-11 00:05:03 Error: unable to connect to database2022-03-11 00:05:03 Script exited with error code 12022-03-11 00:10:01 Task started2022-03-11 00:10:02 Running script /path/to/script.sh2022-03-11 00:10:03 Script completed successfully

Вам может также понравиться...

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

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

WordPress Appliance - Powered by TurnKey Linux