GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash Brace Expansion Tutorial:6 Beispiele zum Erweitern von Ausdrücken in geschweiften Klammern

Bash Shell-Erweiterung

Eine der Operationen der Shell bei der Analyse der Eingabe ist die Shell-Erweiterung. Bash bietet verschiedene Arten von Erweiterungen. Lassen Sie uns in diesem Artikel eine wichtige Erweiterung besprechen – „Brace-Erweiterung“.

Dieser Artikel ist Teil unserer fortlaufenden Bash-Tutorial-Reihe.

Klammererweiterung

Die Klammererweiterung wird verwendet, um beliebige Zeichenfolgen zu generieren. Die Klammererweiterung ermöglicht es Ihnen, mehrere modifizierte Befehlszeilenargumente aus einem einzigen Argument zu erstellen. Die angegebenen Zeichenfolgen werden verwendet, um alle möglichen Kombinationen mit den optional umgebenden Präambeln und Postscripts zu generieren. Die Präambel wird jedem in geschweiften Klammern enthaltenen String vorangestellt, und das Postscript wird dann an jeden resultierenden String angehängt und von links nach rechts erweitert.

$ echo last{mce,boot,xorg}.log
lastmce.log lastboot.log lastxorg.log

where last is Preamble and .log is the postscript

Die obige Echo-Anweisung vermeidet die separate Angabe der drei Protokolldateien. Wenn Sie den Inhalt des letzten Boot-Logs, mce-Logs und xorg-Logs sehen möchten, können Sie die Klammererweiterung verwenden, wie in der obigen Echo-Anweisung gezeigt.

1. Beispiel für Backup mit geschweifter Erweiterung

$ 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

Im obigen Sicherungsskript kopiert es die Protokolldatei des aktuellen Datums mit der Erweiterung .bak. Das erste Element ist in den geschweiften Klammern leer, also hat das erste Element nur eine Präambel.

2. Beispiel für Wiederherstellung mit geschweifter Erweiterung

$ 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

Im Wiederherstellungsskript ist das erste Element im Parameter .bak, wobei das zweite Element leer ist.

Weitere Informationen finden Sie auch in unserem früheren Artikel über Bash-Shell-Funktionen.

3. Beispiel für Klammererweiterung ohne Präambel und Postscript

Wenn es keine Präambel und kein Postscript gibt, erweitert es einfach die in geschweiften Klammern angegebenen Elemente.

$ cat expand.sh
echo {oct,hex,dec,bin}

$ ./expand.sh
oct hex dec bin

Ohne die optionalen Präambel- und Postscript-Strings ist das Ergebnis nur eine durch Leerzeichen getrennte Liste der angegebenen Strings

Klammererweiterung für Ranges

Klammererweiterung erweitert auch die Sequenzen. Die Sequenzen können aus ganzen Zahlen oder Zeichen bestehen.

4. Beispiel für Integer und Zeichenfolgen

$ 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

Der erste cat-Befehl erweitert messages.1, messages.2 und messages.3 und zeigt den Inhalt an. und in der nächsten Echo-Anweisung werden Zeichen- und Integer-Folgen kombiniert und verwendet.

Sequenzen mit Inkrementwert

In der kshell-Klammererweiterung können Sie den Inkrementwert verwenden, um die Sequenzen zu generieren.

Syntax:
<start>..<end>..<incr>

incr ist numerisch. Sie können eine negative Ganzzahl verwenden, aber das richtige Vorzeichen wird aus der Reihenfolge von Start und Ende abgeleitet.

5. Beispiel für die Verwendung von Increment in Sequenzen

$ ksh
$ echo /var/log/messages.{1..7..2}
/var/log/messages.1 /var/log/messages.3 /var/log/messages.5 /var/log/messages.7
$

Mit diesem können Sie die Logfiles der alternativen Tage sehen.

Falle bei der Brace-Erweiterung

Die Klammererweiterung erweitert keine Bash-Variablen, da die Klammererweiterung der allererste Schritt der Shell-Erweiterung ist, die Variable wird später erweitert.

6. Beispiel für Variablen in Erweiterung

Wenn Sie die Ausgabe der folgenden beiden for-Anweisungen sehen, könnten Sie die obige Falle identifizieren.

$ 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. Bash Brace Erweiterung &Variablen?

  2. Bash-If-Else-Anweisung mit Beispielen

  3. 15 Beispiele für Linux Bash History-Erweiterungen, die Sie kennen sollten

  4. Ausdrücke in Vim auswerten

  5. Klammererweiterung:Mehrere Befehle ausführen, anstatt eine Zeile zu erweitern?

35 Bash-Skriptbeispiele

Bash Heredoc-Tutorial für Anfänger

Ping-Tutorial:15 effektive Beispiele für Ping-Befehle

Bash Scripting Einführungstutorial mit 5 praktischen Beispielen

Bash-Variablen-Tutorial – 6 praktische Bash-Beispiele für globale und lokale Variablen

Tutorial zu Bash-Shell-Funktionen mit 6 praktischen Beispielen