Поиск по сайту:

10 полезных советов по написанию эффективных Bash-скриптов в Linux


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

В этой статье мы поделимся 10 полезными и практическими советами по написанию эффективных и надежных bash-скриптов, в том числе:

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

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

Во-первых, комментарии определяются с помощью знака #.

#TecMint is the best site for all kind of Linux articles

2. Завершить сценарий при сбое

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

#let script exit if a command fails
set -o errexit 
OR
set -e

3. Выполните выход из сценария, когда Bash использует необъявленную переменную

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

#let script exit if an unsed variable is used
set -o nounset
OR
set -u

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

Использование двойных кавычек при ссылке (с использованием значения переменной) помогает предотвратить разделение слов (в отношении пробелов) и ненужное подстановку символов (распознавание и расширение подстановочных знаков).

Посмотрите пример ниже:

#!/bin/bash
#let script exit if a command fails
set -o errexit 

#let script exit if an unsed variable is used
set -o nounset

echo "Names without double quotes" 
echo
names="Tecmint FOSSMint Linusay"
for name in $names; do
        echo "$name"
done
echo

echo "Names with double quotes" 
echo
for name in "$names"; do
        echo "$name"
done

exit 0

Сохраните файл и выйдите, затем запустите его следующим образом:

./names.sh

5. Используйте функции в скриптах

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

Синтаксис записи функций следующий:

function check_root(){
	command1; 
	command2;
}

OR
check_root(){
	command1; 
	command2;
}

Для однострочного кода используйте символы завершения после каждой команды, например:

check_root(){ command1; command2; }

6. Используйте=вместо == для сравнения строк.

Обратите внимание, что == является синонимом =, поэтому для сравнения строк используйте только один =, например:

value1=”linux-console.net”
value2=”fossmint.com”
if [ "$value1" = "$value2" ]

7. Используйте $ (команду) вместо устаревшей «команды» для замены.

Подстановка команд заменяет команду ее выходными данными. Используйте $ (команда) вместо обратных кавычек `command` для подстановки команд.

Это рекомендуется даже с помощью инструмента проверки оболочки (показывает предупреждения и предложения для сценариев оболочки). Например:

user=`echo “$UID”`
user=$(echo “$UID”)

8. Используйте режим «только для чтения» для объявления статических переменных

Статическая переменная не меняется; его значение нельзя изменить после того, как оно определено в скрипте:

readonly passwd_file=”/etc/passwd”
readonly group_file=”/etc/group”

9. Используйте имена в верхнем регистре для переменных СРЕДЫ и в нижнем регистре для пользовательских переменных.

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

#define custom variables using lowercase and use uppercase for env variables
nikto_file=”$HOME/Downloads/nikto-master/program/nikto.pl”
perl “$nikto_file” -h  “$1”

10. Всегда выполняйте отладку для длинных сценариев

Если вы пишете сценарии bash с тысячами строк кода, поиск ошибок может стать кошмаром. Чтобы легко исправить ситуацию перед выполнением сценария, выполните некоторую отладку. Освойте этот совет, прочитав руководства, представленные ниже:

  1. Как включить режим отладки сценариев оболочки в Linux
  2. Как выполнить проверку синтаксиса в режиме отладки в сценариях оболочки
  3. Как отслеживать выполнение команд в сценарии оболочки с помощью трассировки оболочки

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