Hoe kinne Arguments nei in Bash-Skript passe

Kommando's, syntaksis en foarbylden

Jo kinne in bash-skript sa skriuwe sadat it arguminten oanjûn wurdt as it skript opfrege is fan 'e kommandorigel. Dizze metoade wurdt brûkt as in skript hat in lyts ferskillende funksje útfierd, ôfhinklik fan de wearden fan ynputparameters (de arguminten).

Jo kinne bygelyks in skript neamd "stats.sh", dy't in bepaalde operaasje útfiert op in bestân, lykas it wizigjen fan syn wurden. As jo ​​it skript op in protte triemmen brûke wolle, is it bêste om de triemnamme as argumint te passearjen, sadat jo itselde skript brûke kinne foar alle triemmen dy 't ferwurke wurde. As de namme fan 'e triem ferwurke is, is "songlist", soenen jo de folgjende kommandorigel ynfiere:

sh stats.sh songlist

Arguminten wurde tagong ta in skript mei de fariabelen $ 1, $ 2, $ 3, ensfh. Wêr $ 1 ferwiist nei it earste argumint, $ 2 nei it twadde argumint en sa. Dit is yllustrearre yn it folgjende foarbyld:

FILE1 = $ 1 wc $ FILE1

Foar lêsberens ferfange in fariant mei in beskriuwende namme oan de wearde fan it earste argumint ($ 1), en nim dan wurd op it wurd wurd utility ( wc ) op dizze fariabele ($ FILE1).

As jo ​​in fariant tal arguminten hawwe, kinne jo de fariabele "$ @" brûke, dy 't in array fan alle ynputparameters. Dit betsjut dat jo in foar-loop brûke kinne om it elemint iterativ te ferwurkjen, lykas yn it folgjende foarbyld illustratearje:

foar FILE1 yn "$ @" do wc $ FILE1 dien

Hjir is in foarbyld fan hoe't jo dit skript mei arguminten fan de kommando-rigel neame:

sh stats.sh songlist1 songlist2 songlist3

As in argumint romte hat, moatte jo it oanmeitsje mei single quotes. Bygelyks:

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

Faak wurdt in skript sa skreaun dat de brûker yn argiven yn elke folchoarder mei flags leverje kin. Mei de flaggenmetoade kinne jo ek guon fan 'e arguminten fakultatyf meitsje.

Lit jo sizze dat jo in skript hawwe dat ynformaasje út in database stipet op basis fan bepaalde parameter, lykas "username", "datum", en "produkt", en in rapport generearret yn in spesifisearre "formaat". No wolle jo jo skript skriuwe, sadat jo yn dizze parameters kinne passe as it skript opropt. It kin sa sjen:

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

Bash jout dizze funksje mei de funksje "getopts". Foar it boppeneamde foarbyld kinne jo gebrûk meitsje as folgjend:

Dit is in tiidrek dat de funksje "getopts" brûkt en in saneamd "optstring", yn dit gefal "u: d: p: f:", om it troch it argumenten te ymportearjen. De tiidrek rint troch de optstring, dy't de flaggen befettet dy't brûkt wurde om arguminten te passen en de argumintwearde foar dizze flagge oanbean oan 'e variable "opsje". De saak-deklaraasje docht dan de wearde fan 'e fariabele "opsje" oan in globale fariabele dy't kin brûkt wurde neidat alle arguminten lêzen binne.

De kolons yn 'e optstring betsjutte dat wearden nedich binne foar de oerienkommende flaggen. Yn it boppeneamde foarbyld wurde alle flaggen folge troch in kolon: "u: d: p: f:". Dit betsjut dat alle flaggen in wearde nedich binne. As bygelyks de flaggen "d" en "f" net ferwachte hawwe om in wearde te hawwen, soe de optstring "u: dp: f" wêze.

In kolon by it begjin fan 'e optstring, bygelyks ": u: d: p: f:", hat in folslein oare betsjutting. It soarget foar jo handige flaggen dy't net fertsjintwurdige binne yn 'e optstring. Yn dat gefal wurdt de wearde fan 'e fariabele "opsje" ynsteld op "?" en de wearde fan "OPTARG" wurdt ynsteld op de ûnferwachte flagge. Jo kinne jo in gaadlike flaterne berjocht sjen litte dy't de brûker fan 'e flater ynformearje.

Arguminten dy't net troch in flagge binne foardat wurde negeare troch getopten. As flaggen yn 'e optstring oanjûn binne net beskikber as it skript oproppen is, dan komt der neat, behalve as jo dit gefal útskeakelje yn jo koade. Alle arguminten dy't net troch getops behannele wurde kinne noch fêstlein wurde mei de reguliere $ 1, $ 2, ensfh-fariabelen.