ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

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