GNU/Linux >> Znalost Linux >  >> Linux

Výukový program pro rozšíření složené závorky Bash:6 příkladů rozšiřujících výrazů ve složených závorkách

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}

Linux
  1. Návod na snadné dokončení bash??

  2. Je `~#` Tilde Expanze of Bash?

  3. Bash Shell Exit Status Tutorial s praktickými příklady

  1. Výukový program Ultimate Bash Array s 15 příklady

  2. 6 Bashových příkladů podmíněných výrazů ( -e, -eq, -z, !=, [, [[ ..)

  3. The Magic ~:Bash Tilde Expansion s 5 příklady

  1. Expanze závorky Bash a proměnné?

  2. Bash If-Else prohlášení s příklady

  3. Expanze závorky:spustit několik příkazů místo rozbalení na jednom řádku?