GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Brace Expansion Tutorial:6 esempi di espansione di espressioni all'interno di parentesi graffe

Espansione Bash Shell

Una delle operazioni della shell quando analizza l'input è l'espansione della shell. Bash fornisce diversi tipi di espansione. In questo articolo esaminiamo un'importante espansione:"Espansione del tutore".

Questo articolo fa parte della nostra serie di tutorial Bash in corso.

Espansione del tutore

L'espansione delle parentesi viene utilizzata per generare stringhe arbitrarie. L'espansione delle parentesi consente di creare più argomenti della riga di comando modificati da un singolo argomento. Le stringhe specificate vengono utilizzate per generare tutte le possibili combinazioni con i preamboli e i postscript facoltativi circostanti. Il preambolo è preceduto da ogni stringa contenuta tra parentesi graffe e il postscript viene quindi aggiunto a ciascuna stringa risultante, espandendosi da sinistra a destra.

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

where last is Preamble and .log is the postscript

L'istruzione echo di cui sopra evita di specificare i tre file di registro separatamente. Se vuoi visualizzare il contenuto dell'ultimo log di avvio, log mce e log xorg puoi usare l'espansione brace come mostrato nell'istruzione echo sopra.

1. Esempio di backup con espansione parentesi graffa

$ 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

Nello script di backup sopra, copia il file di registro della data corrente con estensione .bak. Il primo elemento è vuoto tra parentesi graffe, quindi il primo elemento avrà solo il preambolo.

2. Esempio di ripristino utilizzando l'espansione delle parentesi graffe

$ 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

Nello script di ripristino, il primo elemento nel parametro è .bak dove come secondo elemento è vuoto.

Inoltre, fare riferimento al nostro precedente articolo sulle funzioni della shell bash per ulteriori letture.

3. Esempio di espansione del tutore senza preambolo e poscritto

Se non ci sono preamboli e postscript, espande semplicemente gli elementi indicati tra parentesi graffe.

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

$ ./expand.sh
oct hex dec bin

Senza le stringhe di preambolo e postscript opzionali, il risultato è solo un elenco separato da spazi delle stringhe date

Espansione del rinforzo per le gamme

L'espansione del tutore espande anche le sequenze. Le sequenze possono essere di numeri interi o di caratteri.

4. Esempio per sequenze di numeri interi e di caratteri

$ 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

Il primo comando cat, espande i messaggi.1, i messaggi.2 e i messaggi.3 e visualizza il contenuto. e nella successiva istruzione echo le sequenze di caratteri e interi vengono combinate e utilizzate.

Sequenze con valore di incremento

Nell'espansione delle parentesi graffe di kshell, puoi utilizzare il valore di incremento per generare le sequenze.

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

incr è numerico. Puoi usare un numero intero negativo, ma il segno corretto viene dedotto dall'ordine di inizio e fine.

5. Esempio di utilizzo di Increment in sequenze

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

Usando questo puoi vedere i file di registro dei giorni alterni.

Trappola nell'espansione Brace

L'espansione della parentesi non espande le variabili bash, perché l'espansione della parentesi è il primo passo dell'espansione della shell, la variabile verrà espansa in seguito.

6. Esempio per variabili in espansione

Se vedi l'output delle seguenti due dichiarazioni for, potresti identificare l'insidia di cui sopra.

$ 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. Un tutorial per il completamento di Bash facile??

  2. `~#` è un'espansione di Tilde di Bash?

  3. Bash Istruzione If-Else con esempi

  4. Esercitazione sullo stato di uscita di Bash Shell con esempi pratici

  5. Espansione delle parentesi graffe:esegui diversi comandi invece di espandere su una riga?

35 Esempi di script Bash

Bash Heredoc Tutorial per principianti

Esercitazione Ping:15 esempi di comandi Ping efficaci

Bash Scripting Introduzione Tutorial con 5 esempi pratici

Esercitazione sulle variabili Bash:6 esempi pratici di variabili globali e locali Bash

Tutorial sulle funzioni di Bash Shell con 6 esempi pratici