Hoe om argumente aan te pas by 'n basiese teks

Opdragte, sintaksis en voorbeelde

U kan 'n bash-skrif skryf , sodat dit argumente ontvang wat gespesifiseer word wanneer die skrip vanaf die opdraglyn gebel word. Hierdie metode word gebruik wanneer 'n teks 'n effens ander funksie moet uitvoer, afhangende van die waardes van invoer parameters (die argumente).

Byvoorbeeld, jy het dalk 'n script genaamd "stats.sh" wat 'n spesifieke operasie op 'n lêer uitvoer, soos om sy woorde te tel. As jy die skrip op baie lêers wil gebruik, is dit die beste om die lêernaam as 'n argument te slaag, sodat jy dieselfde skrip kan gebruik vir al die lêers wat verwerk moet word. Byvoorbeeld, as die naam van die lêer wat verwerk moet word, 'n "liedlys" is, sal jy die volgende opdraglyn invoer:

Sh stats.sh liedjie lys

Argumente word toeganklik binne 'n skrif met die veranderlikes $ 1, $ 2, $ 3, ens., Waar $ 1 verwys na die eerste argument, $ 2 tot die tweede argument, ensovoorts. Dit word geïllustreer in die volgende voorbeeld:

FILE1 = $ 1 wc $ FILE1

Vir leesbaarheid, wys 'n veranderlike met 'n beskrywende naam aan die waarde van die eerste argument ($ 1) en skakel dan die woordtelling nut ( wc ) op hierdie veranderlike ($ FILE1).

As u 'n veranderlike aantal argumente het, kan u die "$ @" veranderlike gebruik, wat 'n skikking van al die insetparameters is. Dit beteken dat jy 'n voorloper kan gebruik om dit ietwat te verwerk, soos geïllustreer in die volgende voorbeeld:

vir FILE1 in "$ @" doen wc $ FILE1 gedoen

Hier is 'n voorbeeld van hoe om hierdie skrif met argumente van die opdraglyn te noem:

Sh stats.sh songlist1 songlist2 songlist3

As 'n argument spasies bevat, moet u dit met enkelde aanhalingstekens byvoeg. Byvoorbeeld:

sh stats.sh 'liedjielys 1' 'liedjielys 2' 'liedjielys 3'

Dikwels word 'n skrif geskryf sodat die gebruiker in enige volgorde kan slaag met die gebruik van vlae. Met die vlae metode kan jy ook van die argumente opsioneel maak.

Kom ons sê jy het 'n script wat inligting op 'n databasis op grond van gespesifiseerde parameters, soos 'gebruikersnaam', 'datum' en 'produk', genereer en 'n verslag in 'n bepaalde formaat genereer. Nou wil jy jou skrif skryf sodat jy in hierdie parameters kan slaag wanneer die script geroep word. Dit kan so lyk:

makereport -j jsmith -p notaboeke -af 10-20-2011 -f pdf

Bash maak hierdie funksie moontlik met die "getopts" funksie. Vir die bostaande voorbeeld, kan jy die volgende opskrifte gebruik:

Dit is 'n ruk wat gebruik maak van die "getopts" funksie en 'n sogenaamde "optstring", in hierdie geval "u: d: p: f:" om deur die argumente te herhaal. Die ketting loop loop deur die optreksie, wat die vlae bevat wat gebruik kan word om argumente te slaag, en gee die argument waarde wat vir daardie vlag voorsien word aan die veranderlike "opsie". Die saakstelling gee dan die waarde van die veranderlike "opsie" na 'n globale veranderlike wat gebruik kan word nadat al die argumente gelees is.

Die kolonies in die opname beteken dat die waardes vir die ooreenstemmende vlae benodig word. In die bostaande voorbeeld word alle vlae gevolg deur 'n kolon: "u: d: p: f:". Dit beteken dat alle vlae 'n waarde benodig. As byvoorbeeld die "d" en "f" vlae nie verwag word om 'n waarde te hê nie, sou die optstring "u: dp: f" wees.

'N Kolon aan die begin van die opname, byvoorbeeld ": u: d: p: f:", het 'n heeltemal ander betekenis. Dit laat jou toe om vlae te hanteer wat nie in die opname verteenwoordig word nie. In daardie geval word die waarde van die "opsie" veranderlike ingestel op "?" en die waarde van "OPTARG" is ingestel op die onverwagte vlag. Dit laat u toe om 'n geskikte foutboodskap te vertoon wat die gebruiker van die fout inlig.

Argumente wat nie voorafgegaan word deur 'n vlag nie, word geïgnoreer deur getopts. As vlae wat in die opname gespesifiseer word, nie verskaf word wanneer die skrip geroep word nie, gebeur niks, tensy u hierdie geval spesiaal in u kode hanteer. Enige argumente wat nie deur getops hanteer word nie, kan steeds gevang word met die gereelde $ 1, $ 2, ens veranderlikes.