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

Аргументы командной строки в 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