Bash tips: differenze tra le versioni

verifica e piccole aggiunte
(verifica e piccole aggiunte)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Versioni compatibili}}
==Intro==
==Intro==
'''GNU Bash''' è la shell *nix probabilmente più ricca di funzionalità sia per l'uso interattivo che per lo scripting. Spesso però molte funzioni sono poco note.
'''GNU Bash''' è la shell *nix probabilmente più ricca di funzionalità sia per l'uso interattivo che per lo scripting. Spesso però molte funzioni sono poco note.<br>
Questa pagina ha lo scopo di raccogliere il più ampio numero di "trucchi" più o meno noti riguardanti Bash, senza avere peraltro la pretesa di coprire tutte le funzionalità.


Questa pagina ha lo scopo di raccogliere il più ampio numero di "trucchi" più o meno noti riguardanti Bash, senza avere peraltro la pretesa di coprire tutte le funzionalità.
Si noti che per gli script di sistema è consigliabile limitarsi alle sole istruzioni della shell '''sh''' secondo lo standard ''POSIX'', supportate per esempio da <code>'''dash'''</code>, più leggera ma anche meno potente e poco indicata come shell interattiva.




Riga 169: Riga 170:
  1
  1


; <code>$@</code> : contiene la lista dei parametri passati allo script corrente. Ogni parametro viene opportunamente quotato, questo permette l'utilizzo di questa variabile nei '''cicli for''' per processare (ad esempio) una lista di nomi di file che possono contenere anche spazi. L'uso di questa variabile è quindi in genere consigliato rispetto a <code>'''$*'''</code> che ha la stessa funzione ma non quota i vari parametri;
; <code>$@</code> : contiene la lista dei parametri passati allo script corrente. Ogni parametro viene opportunamente quotato, se questa variabile è quotata, e questo ne permette l'utilizzo nei '''cicli for''' per processare (ad esempio) una lista di nomi di file che possono contenere anche spazi. L'uso di questa variabile è quindi in genere consigliato rispetto a <code>'''$*'''</code> che ha la stessa funzione ma, se quotata, non quota i vari parametri ma l'intera stringa;


''Esempio:''
''Esempio:''
<pre>
<pre>
FILES=$@
for file in "$@"; do
 
for file in $FILES; do
     # Fare quello che si vuole con $file
     # Fare quello che si vuole con $file
     echo $file  
     echo "$file"
     # ...
     # ...
done
done
Riga 187: Riga 186:


=== Manipolazione delle stringhe ===
=== Manipolazione delle stringhe ===
Nelle shell *nix, storicamente, la manipolazione delle stringhe viene fatto attraverso programmi esterni alla shell come sed, awk e perl. Questi programmi vengono ancora usati quando si vuole mantenere la compatibilità con la shell <code>'''sh'''</code>, tuttavia imparare anche il solo sed (il più semplice dei tre) non è cosa immediata.
Nelle shell *nix, storicamente, la manipolazione delle stringhe viene fatto attraverso programmi esterni alla shell come sed, awk e perl. Questi programmi vengono ancora usati quando si vuole mantenere la compatibilità con la shell <code>'''sh'''</code> (''POSIX''), tuttavia imparare anche il solo sed (il più semplice dei tre) non è cosa immediata.


Se si usa Bash, non è necessario usare nessun programma esterno, ma basta imparare i tre operatori fondamentali ed alcuni concetti di base, per poter fare tutte le manipolazioni più comuni.
Se si usa Bash, non è necessario usare nessun programma esterno, ma basta imparare i tre operatori fondamentali ed alcuni concetti di base, per poter fare tutte le manipolazioni più comuni.
Riga 236: Riga 235:


; <code>&&</code> : operatore logico AND, il secondo comando verrà eseguito solo se il primo avrà esito positivo
; <code>&&</code> : operatore logico AND, il secondo comando verrà eseguito solo se il primo avrà esito positivo
; <code>;</code> : separatore di comandi, il secondo comando verrà eseguito in ogni caso
; <code>;</code> : separatore di comandi, il secondo comando verrà eseguito in ogni caso (in uno script è equivalente a un "a capo" e questa è la concatenazione di default)


  $ cd ... && echo done
  $ cd ... && echo done
Riga 326: Riga 325:
# seleziona, apri file, incolla, salva: noioso
# seleziona, apri file, incolla, salva: noioso
# quota il tutto e appendi ad un file con echo: già meglio
# quota il tutto e appendi ad un file con echo: già meglio
# <code>'''CTRL-x'''</code> <code>'''CTRL-e'''</code>, si apre il nostro editor di fiducia e salviamo: superbo
# <code>'''CTRL-x'''</code> <code>'''CTRL-e'''</code>, si apre il nostro editor di fiducia e salviamo: superbo (se si utilizza la modalità ''vi'' è sufficiente premere il tasto v in modalità comando)


===Processo in background===
===Processo in background===
Riga 376: Riga 375:
  $ bind -x '"\C-x\C-r":ls ~'
  $ bind -x '"\C-x\C-r":ls ~'


ora con la sequenza  <code>'''CTRL-x'''</code> <code>'''CTRL-r'''</code> verrà eseguito il nostro comando.
ora con la sequenza  <code>'''CTRL-x'''</code> <code>'''CTRL-r'''</code> verrà eseguito il nostro comando. È possibile anche definire scorciatoie da tastiera a funzioni già supportate da bash ma non ancora assegnate (si veda <code>bind -P</code> per un elenco), e la sintassi è la stessa ma senza l'opzione -x.


Per cancellarla:
Per cancellarla:
  $ bind -r "\C-x\C-r"
  $ bind -r "\C-x\C-r"


Funziona solo nella shell in cui si crea, a meno che non si inserisca nel file <code>~/.inputrc</code>. <br> Per i dettagli consultare <code>man readline</code> e <code>help bind</code>.
Funziona solo nella shell in cui si crea, a meno che non si inserisca nel file <code>~/.inputrc</code>. Per i dettagli consultare <code>man readline</code>.
 
===Aiuto veloce===
 
La pagina di manuale di bash (si veda <code>man bash</code>) è certamente utilissima ed esaustiva, ma non sempre adatta a un aiuto veloce per rinfrescarsi solo la sintassi di qualche comando. Fortunatamente '''bash''' dispone anche di uno strumento di aiuto integrato tramite la funzione <code>help</code>.
 
Per la lista di tutti i comandi interni della shell:
$ help
 
Per informazioni su un comando interno (''shell builtin''), per esempio bind:
$ help bind


Un altro comando utile, per sapere che cosa verrà eseguito con un dato comando (una funzione, un comando interno oppure un eseguibile esterno):
$ type comando-da-cercare


==Link==
==Link==
Riga 394: Riga 405:
|Verificata_da=
|Verificata_da=
:[[Utente:S3v|S3v]]
:[[Utente:S3v|S3v]]
:[[Utente:HAL 9000|HAL 9000]] 21:54, 22 giu 2014 (CEST)
|Estesa_da=
|Estesa_da=
:[[Utente:S3v|S3v]]
:[[Utente:S3v|S3v]]
|Numero_revisori=1
|Numero_revisori=2
}}
}}


[[Categoria:Bash]]
[[Categoria:Bash]]
3 581

contributi