Лучшие практики программирования на Bash

программирования на Bash Программирование и разработка

Bash — одна из самых популярных оболочек, доступных в Linux. Это просто, быстро и легко. Помимо интерпретации и выполнения команд, bash может работать со сценариями для автоматизации определенного набора задач.

В этом руководстве подробно рассматриваются некоторые распространенные практики программирования на bash.

Bash скрипты

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

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

Правильный отступ

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

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

Вот пример сценария с несколькими логиками с правильным отступом.

#!/bin/bash
read -p «Enter a value « var_x
if [ $((var_x%2)) -eq 0 ]then
exit 0
else
exit 1
fi

Вот пример сценария с несколькими логиками с правильным отступом

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

#!/bin/bash
read -p «Enter a value « var_x
if [ $((var_x%2)) -eq 0 ]then
exit 0
else
exit 1
fi

Вот как будет выглядеть код без правильных отступов

Комментирование

Комментирование — одна из самых важных вещей, когда дело доходит до понимания кода. Комментарии должны объяснять различные части кода, особенно если он сложный. Легко запутаться в нескольких частях кода, даже в ваших собственных кодах. Если это большой проект, и другие, вероятно, будут работать над тем же кодом в будущем.

Например, вот пример сценария с комментариями и без них.

username=$1

# check username existence
grep ^$username/etc/passwd
if [ $? !0 ]then
echo «No such user: $username«
exit 1
fi

Например, вот пример сценария с комментариями и без них

user=$1

grep ^$username/etc/passwd
if [ $? !0 ]then
echo «$username not found»
exit 1
fi

Код возврата, если что-то пойдет не так

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

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

#!/bin/bash
read -p «Enter a value « var_x
if [ $((var_x%2)) -eq 0 ]then
exit 0
else
exit 1
fi

В этом примере мы определим, четное или нечетное число

Сценарий существует в случае ошибки

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

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

set -o errexit

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

set -o nounset

Иногда bash может также попытаться использовать необъявленную переменную

Подстановка команд

В некоторых ситуациях вам может потребоваться работа с выводом определенной команды. Мы можем сделать это с помощью подстановки команд.

Командная подстанция имеет разные способы реализации.

echo ‘echo “hello world”’
echo $(echo “hello world)

Всегда рекомендуется использовать второй вариант

Значимое имя переменной

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

Часто шаблоны имен также могут быть временными; люди будут избегать ввода нескольких лишних символов в обмен на кратковременную выгоду. Однако такая практика — верный путь к катастрофе. Когда дело доходит до долгосрочного обслуживания такого кода, бывает сложно понять назначение переменной.

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

Посмотрите на два примера кода, которые выполняют одну и ту же задачу. С каким кодом лучше разбираться и с чем работать?

#!/bin/bash
read -p «Enter length:» x
read -p «Enter width:» y
z = $[$x*$y]
echo «Area: $z«

Посмотрите на два примера кода, которые выполняют одну и ту же задачу

#!/bin/bash
read -p «Enter length:» length
read -p «Enter width:» width
area = $[$length*$width]
echo «Area: $area«

В bash все переменные среды именуются заглавными буквами

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

Использование функций

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

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

Как и переменные, имена функций должны иметь смысл.

function fn_odd(){
local var_x

read -p «Enter number» var_x
read var_x

if [ $((var_x % 2)) -eq 0 ]then
echo «even»
else
echo «odd»
fi
}

Как и переменные, имена функций должны иметь смысл

Типы аргументов

В bash нет фиксированного способа объявления типа переменной. Это может привести к сравнению переменных конфликтующих типов данных. Обеспечение того, чтобы переменные и аргументы были одного и того же ожидаемого типа, избавит вас от многих головных болей.

В следующем примере сценарий распечатает, является ли аргумент числом или нет.

if ! [ «$1» -eq «$1» 2> /dev/null ]
then
echo «ERROR: not number»
exit 1
fi

В следующем примере сценарий распечатает, является ли аргумент числом или нет

Отсутствующие аргументы или неправильный порядок аргументов

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

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

Правильный вывод

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

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

Отладка

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

bash -n <script>

В качестве альтернативы shebang может включить синтаксис в режим отладки.

#!/bin/bash -n

Чтобы запустить bash в режиме отладки, используйте флаг «-x».

bash -x <script>

Чтобы запустить bash в режиме отладки, используйте флаг

Также может быть частью шебанга.

#!/bin/bash -x

Также может быть частью шебанга

Заключение

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

Читайте также:  Операция CRUD в Python с использованием MySQL
Оцените статью
bestprogrammer.ru
Добавить комментарий