Rozšíření prostředí Bash
Jednou z operací shellu, když analyzuje vstup, je rozšíření shellu. Bash poskytuje různé typy rozšíření. V tomto článku se podíváme na důležité rozšíření — „Rozšíření ortézy“.
Tento článek je součástí naší probíhající série Bash Tutorial.
Rozšíření složené závorky
Expanze složené závorky se používá ke generování libovolných řetězců. Rozšíření složených závorek umožňuje vytvořit více upravených argumentů příkazového řádku z jednoho argumentu. Zadané řetězce se používají ke generování všech možných kombinací s volitelnými okolními preambulemi a postscripty. Preambule má předponu ke každému řetězci obsaženému ve složených závorkách a ke každému výslednému řetězci je pak připojen postscript, který se rozšiřuje zleva doprava.
$ echo last{mce,boot,xorg}.log lastmce.log lastboot.log lastxorg.log where last is Preamble and .log is the postscript
Výše uvedený příkaz echo vám zabrání specifikovat tři soubory protokolu samostatně. Pokud chcete zobrazit obsah posledního zaváděcího protokolu, protokolu mce a protokolu xorg, můžete použít rozšíření složené závorky, jak je uvedeno ve výše uvedeném echo prohlášení.
1. Příklad pro zálohování pomocí rozšíření závorky
$ cat bkup.sh set -x # expand the commands da=`date +%F` cp $da.log{,.bak} $ ./bkup.sh ++ date +%F + da=2010-05-28 + cp 2010-05-28.log 2010-05-28.log.bak
Ve výše uvedeném zálohovacím skriptu zkopíruje aktuální soubor protokolu data s příponou .bak. První prvek je ve složených závorkách prázdný, takže první prvek bude mít pouze preambuli.
2. Příklad pro obnovení pomocí rozšíření závorky
$ cat restore.sh set -x # expand the commands da=`date +%F` cp $da.log{.bak,} $ ./restore.sh ++ date +%F + da=2010-05-28 + cp 2010-05-28.log.bak 2010-05-28.log
Ve skriptu obnovení je prvním prvkem v parametru .bak, přičemž druhý prvek je prázdný.
Další informace naleznete také v našem dřívějším článku o funkcích shellu bash.
3. Příklad expanze složených závorek bez preambule a postscriptu
Pokud zde není preambule a postscript, pouze rozšiřuje prvky uvedené ve složených závorkách.
$ cat expand.sh echo {oct,hex,dec,bin} $ ./expand.sh oct hex dec bin
Bez volitelné preambule a postscriptových řetězců je výsledkem pouze mezerou oddělený seznam daných řetězců
Rozšíření složené závorky pro rozsahy
Expanze závorky také rozšiřuje sekvence. Sekvence mohou mít celá čísla nebo znaky.
4. Příklad celočíselných a znakových sekvencí
$ cat sequence.sh cat /var/log/messages.{1..3} echo {a..f}{1..9}.txt $ ./sequence.sh May 9 01:18:29 x3 ntpd[2413]: time reset -0.132703 s May 9 01:22:38 x3 ntpd[2413]: synchronized to LOCAL(0), stratum 10 May 9 01:23:44 x3 ntpd[2413]: synchronized to May 9 01:47:48 x3 dhclient: DHCPREQUEST on eth0 May 9 01:47:48 x3 dhclient: DHCPACK from 23.42.38.201 .. .. a1.txt a2.txt a3.txt a4.txt b1.txt b2.txt b3.txt b4.txt c1.txt c2.txt c3.txt c4.txt
První příkaz cat rozbalí zprávy.1,zprávy.2 a zprávy.3 a zobrazí obsah. a v dalším příkazu echo jsou kombinovány a použity znakové a celočíselné sekvence.
Sekvence s hodnotou přírůstku
V rozšíření složené závorky kshell můžete ke generování sekvencí použít hodnotu přírůstku.
Syntax: <start>..<end>..<incr>
incr je číselný údaj. Můžete použít záporné celé číslo, ale správné znaménko se odvodí z pořadí začátku a konce.
5. Příklad použití Přírůstek v sekvencích
$ ksh $ echo /var/log/messages.{1..7..2} /var/log/messages.1 /var/log/messages.3 /var/log/messages.5 /var/log/messages.7 $
Pomocí tohoto můžete vidět soubory protokolu pro každý druhý den.
Úskalí v expanzi Brace
Expanze závorky nerozšiřuje bash proměnné, protože expanze závorky je úplně prvním krokem expanze shellu, proměnná bude rozšířena později.
6. Příklad pro proměnné v expanzi
Pokud uvidíte výstup následujících dvou prohlášení, můžete identifikovat výše uvedené úskalí.
$ cat var_seq.sh # Print 1 to 4 using sequences. for i in {1..4} do echo $i done start=1 end=4 # Print 1 to 4 using through variables echo "Sequences expressed using variables" for i in {$start..$end} do echo $i done $ ./var_seq.sh 1 2 3 4 Sequences expressed using variables {1..4}