2011-05-17

Sequenze di valori con bash

Negli script serve a volte una serie di numeri o caratteri in sequenza e bash prevede la funzionalità per generarli agevolmente.
Si utilizza quella che viene definita Brace Expansion e per ottenere una lista di numeri da 1 a 7 il formalismo previsto è {1..7} , i numeri 1 e 7, separati da una coppia di punti, rappresentano il numero iniziale e quello finale, quindi provando ad eseguire:
echo {1..7}
si ottiene
1 2 3 4 5 6 7
qualsiasi comando al posto di echo otterrà gli stessi valori come parametro quindi con il comando
touch file{1.20}.txt
otterremo venti file vuoti con i nomi "file1.txt", "file2.txt" e così via fino a file20.txt.

Se avessimo voluto ottenere solo i file con il numero dispari avremmo utilizzato la versione con il valore di incremento aggiungendo di nuovo una coppia di punti ed il numero:
touch file{1..15..2}.txt
Lo stesso vale per le lettere che vanno usate singolarmente:
echo {a..h}
oppure
echo {d..n}
per ottenere rispettivamente:
a b c d e f g h
d f h j l n
Non si può utilizzare più di una lettere per definire l'inizio o la fine mentre, come visto dagli esempi si possono utilizzare numeri a più cifre.
Poi esistono gli elenchi definiti in modo esplicito, tra le graffe si riportano i valori da utilizzare separati dalla virgola
echo {primo,secondo,terzo}
per ottenere in modo poco comodo l'elenco:
primo secondo terzo
di quello riportato in questo esempio si tratta di un utilizzo con fine puramente esplicativo ma va immaginato l'utilizzo con comandi più complessi nei quali le opzioni digitate sono tante e la ripetizione del comando può essere fastidiosa, ad esempio con il comando find per cercare un file modificato negli ultimi 3 giorni dentro alcune directory con percorso simile:
find /mnt/external/usr/{bin,local/bin} -mtime 3

Nessun commento:

Posta un commento