Как да обработвам аргументите на командния ред в Bash?

Kak Da Obrabotvam Argumentite Na Komandnia Red V Bash



В Linux използваме аргументи от командния ред като вход за bash скрипта. Bash може да вземе тези аргументи от командния ред последователно и да ги анализира като опция. Тези аргументи ви позволяват да повлияете динамично на действията и изхода на скрипта.

Можете да конфигурирате тези аргументи по различен начин, за да повлияете на входа и изхода. Ето защо работата с аргументи на командния ред в bash е от съществено значение, но много нови потребители трябва да се научат как да го правят. Така че в това ръководство ще обясним различни начини за обработка на аргументи от командния ред в bash.







Как да обработвам аргументите на командния ред в Bash?

Има различни начини за обработка на аргументи от командния ред в Bash, така че нека ги разгледаме, за да получим кратка информация:



Функцията getopt



Функцията getopt е удобна, тъй като предоставя опциите и синтаксиса за дефиниране и анализиране на аргументи в bash. Това е вградена функция на Linux, която можете да използвате, докато създавате файл с база данни или отчет в специфичен формат въз основа на аргументите. Функцията getopt помага за анализиране на кратките аргументи на командния ред, тъй като има два типа аргументи:





  • Кратки аргументи: Това са аргументите от един знак, последвани от тире. Например -a, -l, -h и т.н. са няколко примера за единични аргументи.

  • Дълги аргументи: Това са многосимволните аргументи, последвани от двойно тире. Има различни примери за дълги аргументи, като –all, –list, –help и др.

Нека вземем пример, при който ще обработваме аргументите на командния ред с помощта на помощната програма getopt. Създадохме bash скрипт с име “getopt.sh”, който съдържа следната информация:



!/ кошче / баш

докато getopts 'A:B:C:D:' подробности; направи

случай ' $подробности ' в

А )

ехо „Името на гражданина е $OPTARG ' ;;

б )

ехо „Citizen ID е $OPTARG ' ;;

° С )

ехо „Родното място е $OPTARG ' ;;

д )

ехо „Професията е $OPTARG ' ;;

* )

изход 1 ;;

esac

Свършен

смяна ' $(($OPTING -1) )'



ако [ ! $1 ] ; тогава

ехо „Семейно положение $1“

друго

ехо „Без записи“

изход 1

бъда



ако [ ! $2 ] ; тогава

ехо „Членове на семейството $2“

бъда

Сега нека изпълним скрипта с необходимите аргументи във входа:

Както можете да видите на изображението по-горе, изпълняваме скрипта само с функции getopt и след това добавяме нормални аргументи, за да получим пълния резултат.

Използване на знамена

Флаговете не са нищо друго освен единични знаци, предшествани от тирета (-). Когато предаваме аргументите с помощта на функцията getopt, използваме флагове. -a, -b, -c са някои примери за флагове. Например  скриптът изисква име, лична карта, място, възраст и професия на гражданин. Следователно използвахме знамена j, k, l, m, n, за да дефинираме едновременно името, личната карта, мястото, възрастта и професията на гражданина:

#!/bin/bash

Докато getopts j:k:l:m:n: информация за флаг

направи

случай ' ${flag_info} ' в
< ол >
< че > й ) гражданско име = ${OPTARG} ;; че >
< че > к ) гражданин = ${OPTARG} ;; че >
< че > л ) място = ${OPTARG} ;; че >
< че > м ) възраст = ${OPTARG} ;; че >
< че > н ) професия = ${OPTARG} ;; че >
ол >
esac

Свършен

ехо „Ето въведените данни:“

ехо „Гражданско име: $citizenname ' ;

ехо „Гражданска лична карта: $citizenid ' ;

ехо „Място: $ място ' ;

ехо „Възраст: $възраст ' ;

ехо 'Професия: $окупация ' ;

Скриптът ще даде следния резултат в терминала:

. /< сценарий > .sh -j Дани 476 Торонто 25 Автор

Използвайки [имейл защитен] С примки

„ [имейл защитен] ” променливата не е нищо друго освен масив от всички входни аргументи. Можем да подадем произволен брой входове, използвайки „ [имейл защитен] ” променлива. Можете да използвате тази променлива като цикъл за итериране на аргументите. „ [имейл защитен] ” променливата е полезна тогава; не знаете размера на входа и не можете да приемете позиционните аргументи. Следователно можете да използвате „ [имейл защитен] ”  вместо да дефинирате функцията getopt отново и отново. Ето пример за използване на цикли и [имейл защитен] заедно в скрипт:

#!/bin/bash

никой = ( „$ @ )



ако [ $# -gt 1 ]

тогава



добавете =$ ( ( ${num[0]} + ${num[1]} ) )

ехо „Събирането на всички числа е: $добавете '



изваждане =$ ( ( ${num[0]} - ${num[1]} - ${num[2]} ) )

ехо „Изваждането на числата е: $ изваждане '



умножават се =$ ( ( ${num[0]} * ${num[1]} * ${num[2]} ) )

ехо „Умножението на числата е: $умножете '



дивизия1 =$ ( ( ${num[0]} / ${num[1]} ) )

ехо „Разделение на ${num[0]} и ${num[1]} е: $разделение1 '



дивизия2 =$ ( ( ${num[1]} / ${num[2]} ) )

ехо „Разделение на ${num[1]} и ${num[2]} е: $разделение2 '



дивизия3 =$ ( ( ${num[0]} / ${num[2]} ) )

ехо „Разделение на ${num[0]} и ${num[2]} е: $разделение2 '



бъда

Горният скрипт извършва различни аритметични изчисления въз основа на аргументите на командния ред. Например въведохме 50, 35 и 15 като вход:

Използване на позиционни параметри

Можете да получите достъп до позиционните параметри, тъй като те първо имат достъп до $1, след това до $2 и т.н. Например, нека създадем скрипт, който чете име като първи аргумент и след това град като втори. Въпреки това, ако преминете първо града и след това името, тогава той счита името за град и обратно. Нека се потопим по-задълбочено в следния скрипт, за да разберем тази концепция:

#!/bin/bash

ехо „Ето въведените данни“

ехо 'име $1'

ехо 'град $2'

Трябва да добавите името и града по време на изпълнение на скрипта в терминала:

Обобщавайки

Това е всичко, което трябва да знаете за методите за обработка на аргументи на командния ред в bash. Обяснили сме различни подходи, които можете да опитате с подходящите примери. Има различни команди, ако искате да добавите аргументи в скрипта. Така че не забравяйте да посетите Linuxhint, за да научите повече за тях.