Како да ги предадете аргументите на баш-сценариото

Команди, синтакса и примери

Можете да напишете bash скрипта така што ќе добиете аргументи наведени кога сценариото е повикано од командната линија. Овој метод се користи кога сценариото треба да изврши малку поинаква функција во зависност од вредностите на влезните параметри (аргументите).

На пример, може да имате скрипта наречена "stats.sh" која изведува одредена операција во датотека, како на пример броење на неговите зборови. Ако сакате да можете да ја користите таа скрипта на многу датотеки, најдобро е да го пренесете името на датотеката како аргумент, за да можете да ја користите истата скрипта за сите датотеки што треба да се обработуваат. На пример, ако името на датотеката што треба да се обработува е "listlist", ќе ја внесете следнава командна линија:

sh stats.sh листа на песни

Аргументите се пристапуваат внатре во сценариото користејќи ги променливите $ 1, $ 2, $ 3, итн, каде што $ 1 се однесува на првиот аргумент, $ 2 до вториот аргумент, и така натаму. Ова е илустрирано во следниот пример:

FILE1 = $ 1 WC $ FILE1

За читливост, доделите променлива со описно име на вредноста на првиот аргумент ($ 1), а потоа јавете ја функцијата за броење на зборови ( wc ) на оваа променлива ($ FILE1).

Ако имате променлив број на аргументи, можете да ја користите променливата "$ @", која е низа од сите влезни параметри. Ова значи дека можете да користите за-јамка за итеративно да ги обработувате секој од нив, како што е илустрирано во следниов пример:

за FILE1 во "$ @" направете wc $ FILE1 направено

Еве пример за тоа како да го повикате ова скрипта со аргументи од командната линија:

sh stats.sh songlist1 songlist2 songlist3

Ако аргументот има празни места, треба да го приложите со единечни цитати. На пример:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

Најчесто сценариото е напишано така што корисникот може да ги пренесе аргументите во било која цел со користење на знамиња. Со методата на знамиња, исто така можете да направите некои од аргументите опционални.

Дозволете да кажете дека имате скрипта која ги презема информациите од базата на податоци врз основа на одредени параметри, како што се "корисничко име", "датум" и "производ" и генерира извештај во одреден "формат". Сега сакате да ја напишете вашата скрипта за да можете да поминете во овие параметри кога се свикува скрипта. Може да изгледа вака:

makereport -u jsmith -p notebooks -d 10-20-2011 -f pdf

Баш ја овозможува оваа функционалност со функцијата "getopts". За горенаведениот пример, можете да ги користите getopts како што следува:

Ова е време-циклус кој ја користи функцијата "getopts" и т.н. "optstring", во овој случај "u: d: p: f:", да се повтори низ аргументите. Временскиот циклус поминува низ optstring, кој ги содржи знаменцата што може да се користи за да се пренесат аргументи, и се доделува вредноста на аргументот предвидена за тоа знаме со променливата "опција". Изјавата за случај потоа ја доделува вредноста на променливата "опција" во глобална променлива што може да се користи откако сите аргументи се прочитани.

Колони во optstring значи дека се потребни вредности за соодветните знамиња. Во горенаведениот пример сите знамиња се проследени со дебелото црево: "u: d: p: f:". Ова значи, сите знамиња треба вредност. Ако, на пример, не се очекува дека знамето "d" и "f" ќе имаат вредност, optstring ќе биде "u: dp: f".

На дебелото црево на почетокот на optstring, на пример ": u: d: p: f:", има сосема поинакво значење. Тоа ви овозможува да работите со знамиња кои не се претставени во optstring. Во тој случај вредноста на опцијата "опција" е поставена на "?" и вредноста на "OPTARG" е поставена на неочекувано знаме. Ви овозможува да прикажете соодветна порака за грешка која го информира корисникот за грешката.

Аргументите на кои не им претходи знаме се игнорираат од getopts. Ако знаците наведени во optstring не се дадени кога сценариото е повикано, ништо не се случува, освен ако специјално не се справи со овој случај во вашиот код. Сите аргументи кои не се обработуваат од getops сеуште можат да бидат зафатени со редовни $ 1, $ 2, итн променливи.