ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Bash для начинающих. Передача аргументов в сценарии Bash

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

Аргументы могут быть полезны, особенно с Bash!

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

В этой статье вы узнаете, как передавать переменные в сценарии bash из командной строки.

 

Передача аргумента сценарию оболочки bash

Следующий скрипт count_lines.sh выведет общее количество строк, которые существуют в любом файле, который пользователь вводит:

#!/bin/bash

echo -n "Пожалуйста, введите имя файла: "
read filename
nlines=$(wc -l < $filename)

echo "В $filename есть строки $nlines"

 

Например, пользователь может войти в файл, /etc/passwd и в результате скрипт выдаст количество строк:

Этот сценарий отлично работает; однако есть гораздо лучшая альтернатива!

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

./count_lines.sh /etc/passwd

 

К первому аргументу bash (также известному как позиционный параметр) можно получить доступ в вашем сценарии bash с помощью переменной $1.

Итак, в сценарии count_lines.sh вы можете заменить имя файла $1 следующим образом:

#!/bin/bash

nlines=$(wc -l < $1)
echo "В $1 есть строки $nlines"

 

Обратите внимание, что мы также избавились от команд чтения и первого эха, поскольку они больше не нужны!

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

./count_lines.sh    /etc/group
There are 73 lines in /etc/group

 

Передача нескольких аргументов в сценарий оболочки bash

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

script.sh arg1 arg2 arg3  …

 

На второй аргумент будет ссылаться переменная $2, на третий аргумент будет ссылаться $3, .. и т. д.

Переменная $0 содержит имя вашего скрипта в случае, если вам интересно!

Теперь мы можем отредактировать наш bash-скрипт count_lines.sh, чтобы он мог подсчитывать строки более чем одного файла:

#!/bin/bash

n1=$(wc -l < $1)
n2=$(wc -l < $2)
n3=$(wc -l < $3)

echo "В $1 есть строки $n1"
echo "В $2 есть строки $n3"
echo "В $3 есть строки $n3"

 

Теперь вы можете запустить сценарий и передать три файла в качестве аргументов сценарию bash:

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

 

Творческий подход с аргументами в оболочке Bash

Некоторые из них немного сложные, поскольку могут иметь длинный синтаксис или длинный набор опций, которые вы можете использовать.

К счастью, вы можете использовать аргументы bash, чтобы превратить сложную команду в довольно простую задачу!

Чтобы продемонстрировать это, взгляните на следующий find.sh сценарий bash:

#!/bin/bash

find / -iname $1 2> /dev/null

 

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

Вы видите, что теперь это намного проще, чем вводить всю команду find! Это доказательство того, что вы можете использовать аргументы, чтобы превратить любую длинную сложную команду в Linux в простой сценарий bash.

Если вам интересно 2> /dev/null, это означает, что любое сообщение об ошибке (например, невозможно получить доступ к файлу) не будет отображаться на экране.

 

Дополнительный совет: специальные переменные в оболочке Bash

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

В таблице ниже представлены наиболее распространенные специальные встроенные переменные bash:

Специальная переменная Описание
$0 Имя сценария bash.
$1, $2 … $n Аргументы сценария bash.
$$ Идентификатор процесса текущей оболочки.
$# Общее количество аргументов, переданных скрипту.
$@ Значение всех аргументов, переданных скрипту.
$? Статус выхода последней выполненной команды.
$! Идентификатор процесса последней выполненной команды.

 

Чтобы увидеть эти специальные переменные в действии; взгляните на следующий variables.sh сценарий bash:

#!/bin/bash

echo "Название сценария: $0"
echo "Общее количество аргументов: $#"
echo "Значения всех аргументов: $@"

 

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

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

Exit mobile version