Quoll Faq Bash

Faq bash

Pubblicato il Pubblicato in Faq

Rinominare un gruppo di file in base ad una regexpr

Supponiamo di voler rinominare il nome di un gruppo di file che hanno il seguente template:

file1_tmp.sh
file2_tmp.sh
...
file99_tmp.sh

e supponiamo di voler togliere la parte centrale ‘_tmp’ in tutti i file. Possiamo utilizzare il comando “rename” o “prename”:

 rename 's/_tmp//' *.sh

 

Redirigere lo standard error sullo standart output

Per redirigere lo standard error di un comando in shell basta utilizzare la seguente sinstassi seguente:

ls file_non_esistente 2>&1 | grep File

oppure ancor meglio per non avere sul terminale lo standard error basta buttarlo in /dev/null

ls file_non_esistente 2>/dev/null

Gli identificativi standard o canali standard (o standard streams) aperti automaticamente sono:

  • 0 standard input
  • 1 standard output
  • 2 standard error

 

Uso di array semplici in bash

Con Bash per dichiarare esplicitamente un array bisogna utilizzare

declare -A mioarray

Per avere il valore dell’elemento 5 basta scrivere

echo $[mioarray[5]

mentre per cambiare il valore  bisogna scrivere

mioarray[5]='nuovo valore'

${mioarray[*]} o ${mioarray[@]} viene espanso da tutti i valori dell’array mentre $[#mionome[@]} viene espanso con la lunghezza dell’array

Cosa possiamo fare con gli array? Ad esempio memorizzare l’output di un comando di cui ogni riga vorremmo che vada su un elemento differente.

IFS=$'\n' mioarray=($(ls -alh))

A questo punto possiamo stampare l’output come

 IFS=$'\n' echo "${mioarray[*]}"

Attenzione: i doppi apici sono importanti per non avere l’output su un’unica riga.

Facendo così potremmo fare diversi test sullo stesso output catturato una sola volta.

 

 

Uso di array associativi in bash

Per dichiarare un array associativo bisogna dichiararlo con

declare -A mioarray/

e come indice si può utilizzare una stringa, questo significa che

mioarray[test]='aa'
echo ${mioarray[test]} # restituisce 'aa'

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *