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

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

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

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

 

Использование переменных аргументов:

Переменная аргумента начинается с $ 0. Имя основного файла сценария хранится в $ 0, который получает значения аргументов из аргументов командной строки. Если в командной строке передаются два аргумента, то последовательно значения аргументов будут получены в переменных $ 1 и $ 2.

 

Пример 1: отправка трех числовых значений в аргументы командной строки

Создайте файл bash со следующим сценарием. Сценарий получит значения с тремя аргументами и сохранит их в переменных $ 1, $ 2 и $ 3. Он будет подсчитывать общее количество аргументов и выводить значения аргументов, используя цикл без цикла. Сумма всех значений аргументов будет напечатана позже.

#!/bin/bash
# Подсчет общего количества аргументов
echo "Общее количество аргументов: $ #"

# Чтение значений аргументов по отдельности
echo "Значение первого аргумента: $1"
echo "Значение второго аргумента: $2"
echo "Значение третьего аргумента: $3"

# Чтение значений аргументов с использованием цикла
for argval in "$@"
do
echo -n "$argval "
done

# Добавление значений аргументов
sum=$(($1+$2+$3))

# Вывод результата
echo -e "\nРезультат суммы = $sum"

 

Следующий вывод появится после выполнения файла сценария с тремя числовыми значениями аргументов: 50, 35 и 15.

$ bash cmdline1.sh 50 35 15

 

Пример 2: использование имени файла в качестве аргумента

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

#!/bin/bash
filename=$1
totalchar="wc -c $filename"
echo "Общее количество символов в $totalchar "

 

Запустите сценарий bash с именем файла в качестве значения одного аргумента и запустите другую команду, чтобы проверить общее количество символов в этом файле. Здесь в качестве значения аргумента используется файл weekday.txt. Общее количество символов в файле weekday.txt — 57.

$ bash cmdline2.sh weekday.txt
$ wc -c weekday.txt

 

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

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

 

Пример 3: Чтение аргументов функцией getopts

Создайте файл bash со следующим сценарием, чтобы понять использование функции getopts. Функция getopts используется с циклом while для чтения параметров аргументов командной строки и значений аргументов. Здесь используются 4 варианта: «i», «n», «m» и «e». оператор case используется для сопоставления конкретной опции и сохранения значения аргумента в переменной. Наконец, распечатайте значения переменной.

#!/bin/bash
while getopts ":i:n:m:e:" arg; do
case $arg in
i) ID=$OPTARG;;
n) Name=$OPTARG;;
m) Manufacturing_date=$OPTARG;;
e) Expire_date=$OPTARG;;
esac
done
echo -e "\n$ID $Name $Manufacturing_date $Expire_date\n"

 

Запустите файл со следующими параметрами и значениями аргументов. Здесь p100 — значение опции -i, «Hot Cake» — значение опции -n, « 01-10-2021 » — значение опции -m, а «05-10-2021 » — значение — е вариант.

$ bash cmdline3.sh -i p001 -n 'Hot Cake' -m '01-10-2021' -e '05-10-2021'

 

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

 

Пример 4: Чтение обычных аргументов и аргументов с помощью параметров getopts

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

#!/bin/bash

# Чтение аргументов с опциями getopts
while getopts 'h:u:p:' OPTION; do
case "$OPTION" in
h)
# Вывести имя хоста
echo "Имя хоста - $OPTARG " ;;
u)
# Вывести имя пользователя
echo "Имя пользователя - $OPTARG " ;;
p)
# Вывести пароль
echo "Пароль: $OPTARG " ;;
*)
# Вывести справочное сообщение для неверных опций
echo "Usage: $0 [-h value] [-u value] [-p value]" >&2
# Завершить выполнение сценария
exit 1 ;;
esac
done

# Удалить все параметры, переданные getopts options
shift "$(($OPTIND -1))"

# Чтение первых обычных аргументов
if [ ! -z $1 ]; then
echo "The first table name is $1"
else
echo "No normal argument is given."
exit 1
fi

# Чтение второго нормального аргумента
if [ ! -z $2 ]; then
echo "The second table name is $2"
fi

# Чтение третьего нормального аргумента
if [ ! -z $3 ]; then
echo "The third table name is $3"
fi

 

Использование ‘$@’ для чтения аргументов командной строки:

Аргументы командной строки можно прочитать без использования переменных аргументов или параметров getopts. Использование символа «$@» в первой скобке — еще один способ прочитать все значения аргументов командной строки.

 

Пример 5: Чтение значений аргументов командной строки без переменной

Создайте файл bash со следующим сценарием, чтобы прочитать значения аргументов без какой-либо переменной аргумента и вычислить сумму трех значений аргументов командной строки. Здесь в первых скобках используется «$@» для считывания всех значений аргументов в массив. Затем будет напечатана сумма первых трех значений массива.

#!/bin/bash
# Прочитать все значения аргументов
argvals=("$@")
# Проверить общее количество аргументов
if [ $# -gt 2 ]
then
# Вычислить сумму трех аргументов командной строки
sum=$((${argvals[0]}+${argvals[1]}+${argvals[2]}))
echo "Сумма 3 аргументов командной строки равна $sum"
fi

 

В выводе появится после выполнения вышеуказанного сценария для значений аргументов 12, 20 и 90. Сумма этих чисел равна 122.

 

Заключение:

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

Exit mobile version