Поиск по сайту:
Во всяком творении гения мы узнаем собственные отвергнутые мысли (Р. Эмерсон).

Передайте именованный аргумент в сценарии Bash

20.05.2023
Передайте именованный аргумент в сценарии Bash

Значения аргументов командной строки могут быть переданы в сценарии Bash двумя способами. Один из способов — использовать позиционные аргументы, такие как $1, $2, $3 и т. д. Другой способ — использовать именованные аргументы. Использование позиционного аргумента не так полезно для доступа к значениям аргумента, потому что четко не определено, какой позиционный аргумент содержит какой тип данных. Но осмысленную опцию можно использовать с именованным аргументом, что помогает понять, какой аргумент содержит данные какого типа. В этом руководстве показано использование именованных аргументов в Bash.

 

Использование Getopts и Getopt

И getopts, и getopt используются в Bash для чтения именованных значений аргументов. Но между этими инструментами есть разница. Getopts используется для чтения коротких параметров, таких как -h, -d и т. д. Но он не может читать длинные параметры, такие как –version, –user и т. д. Getopt используется для чтения значения длинного параметра.

 

Пример 1. Чтение именованных аргументов с помощью Getopts

Создайте файл Bash со следующим сценарием, который считывает два именованных аргумента с помощью getopts, поддерживающих короткие параметры. Опции -i и -r используются для передачи именованных значений аргументов во время выполнения скрипта. Затем значение аргумента, которое считывается с помощью опции -i, сверяется с определенным значением, чтобы напечатать вывод на основе совпадающего значения.

#Чтение значений аргументов на основе опций
while getopts "i:r:" var
do
   case "$var" in
       i) ID=${OPTARG};;
       r) GPA=${OPTARG};;
   esac
done

#Вывести сообщение на основе соответствующего значения идентификатора, переданного в аргументе
if [[ "$ID" == "56" ]]; then
    echo "Mir Sabbir получил $GPA"
elif [[ "$ID" == "34" ]]; then
    echo "Nirob Ahsan получил $GPA"
else
    echo "ID недействителен."
fi

 

Читать  4 способа найти свой IP-адрес в Ubuntu, Linux

Сценарий выполняется дважды в следующем выводе. Скрипт выполняется без каких-либо аргументов при первом выполнении. Итак, сообщение об ошибке отображается. Сценарий выполняется с двумя допустимыми именованными аргументами во втором выполнении. Отформатированные значения именованных значений аргументов печатаются в выводе:

andreyex@andreyex:~$ bash namedarg1.bash
ID недействителен.
andreyex@andreyex:~$ bash namedarg1.bash -i 56 -r 3.78
Mir Sabbir получил 3.78
andreyex@andreyex:~$

 

Пример 2. Чтение именованных аргументов с помощью Getopt

Создайте файл Bash со следующим сценарием, который считывает два именованных аргумента с помощью getopt, поддерживающего длинные параметры. Параметры –email и –pass используются для передачи именованных значений аргументов во время выполнения скрипта. Значения аргументов, которые считываются именованными аргументами, хранятся в двух переменных с именами $Email и $Password. Затем значения этих переменных сравниваются с конкретными значениями и распечатываются выходные данные на основе результатов сравнения.

#!/bin/bash
#Установить параметры команды getopt
format=$(getopt -n "$0" -l "email:,pass:" -- -- "$@")
if [ $# -lt 3 ]; then
   echo "Передано неправильное количество аргументов."
   exit
fi
eval set -- "$format"

#Прочитайте значения аргументов
while [ $# -gt 0 ]
do
     case "$1" in
          --email) Email="$2"; shift;;
          --pass) Password="$2"; shift;;
          --) shift;;
     esac
     shift;
done

#Сравните значения аргумента с конкретным значением
if [[ "$Email" == "admin@example.com" && "$Password" == "secretpass" ]]; then
    echo "Действительный пользователь"
else
    echo "Неверный пользователь"
fi

 

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

andreyex@andreyex:-$ bash namedarg2.bash
Передано неправильное количество аргументов.
andreyex@andreyex:-$ bash namedarg2.bash --email " admin@example.com " --pass "secret" Invalid user
andreyex@andreyex:-$ bash namedarg2.bash --email " admin@example.com " --pass "secretpass"
Действительный пользователь
andreyex@andreyex:-$

 

Читать  Инструменты для мониторинга активности диска в Linux

Пример 3. Чтение именованного аргумента без Getopts и Getopt

Создайте файл Bash со следующим сценарием, который считывает три именованных аргумента с помощью цикла «пока». Согласно сценарию, для передачи именованных аргументов в сценарий можно использовать как короткие, так и длинные параметры. Опции -u или –user, -p или –pass и -h или –host используются для передачи трех именованных значений аргументов во время выполнения скрипта. Затем значения аргументов считываются и сохраняются в трех переменных с помощью цикла «пока» и команды «сдвиг».

#!/bin/bash
#Читать значения аргументов
while [[ "$#" -gt 0 ]]
  do
    case $1 in
      -u|--user) User="$2"; shift;;
      -p|--pass) Password="$2"; shift;;
      -h|--host) Host="$2"; shift;;
    esac
    shift
done
#Вывести значения аргументов
printf "username: $User \npassword: $Password \nhostname: $Host\n"

Сценарий выполняется с тремя допустимыми именованными аргументами в следующем выводе. Итак, выводятся значения трех аргументов:

andreyex@andreyex:~$ bash namedarg3.bash -u andreyex --pass hello123 -h localhost 
username: andreyex 
password: hello123 
hostname: localhost 
andreyex@andreyex:~$

 

Заключение

В этой статье показаны различные способы использования именованных аргументов в сценарии Bash, чтобы помочь пользователям Bash узнать, как использовать именованные аргументы.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Ну, кот вылез из мешка. Nvidia подтвердила, что выпустит три карты серии…

Спасибо!

Теперь редакторы в курсе.