BASH (che sta per Bourne Again Shell) è un linguaggio di scripting utilizzato dalla maggior parte dei sistemi operativi basati su Linux e UNIX.
È possibile eseguire i comandi BASH all'interno di una finestra di terminale uno dopo l'altro oppure è possibile aggiungere i comandi a un file di testo per produrre uno script di shell.
Il bello della scrittura degli script di shell è che puoi eseguirli ancora e ancora. Ad esempio, immagina di dover aggiungere un utente a un sistema, impostarne le autorizzazioni e gestire l'ambiente di partenza. Puoi scrivere i comandi su un pezzo di carta ed eseguirli mentre aggiungi nuovi utenti oppure puoi scrivere un singolo script e passare semplicemente i parametri in quello script.
I linguaggi di scripting come BASH hanno costrutti di programmazione simili a quelli di altre lingue. Ad esempio, è possibile utilizzare i parametri di importazione per ottenere input dalla tastiera e memorizzarli come variabili. È quindi possibile ottenere lo script per eseguire una determinata azione in base al valore dei parametri di input.
Una parte fondamentale di qualsiasi linguaggio di programmazione e scripting è la possibilità di eseguire lo stesso pezzo di codice ancora e ancora.
Esistono diversi modi per ripetere il codice (noto anche come loop). In questa guida, ti verrà mostrato come scrivere un ciclo "for".
UN per loop ripete più volte una determinata sezione del codice. Sono utili in modo che una serie di comandi possano continuare a funzionare finché non viene soddisfatta una particolare condizione, dopo di che si fermeranno.
In questa guida, ti verranno mostrati cinque modi per utilizzare il ciclo for all'interno di uno script BASH.
Prima di iniziare
Prima di iniziare con gli esempi di ciclo for, è necessario aprire una finestra di terminale e seguire questi passaggi:
-
accedere script mkdir (scopri di più su mkdir qui).
-
accedere script cd (questo cambia la directory in script ).
-
accedere nano examplen.sh (dove n è l'esempio su cui stai lavorando).
-
Inserisci lo script
-
stampa CTRL + O per salvare e CTRL + X uscire.
-
Correre bash examplen.sh (ancora, con n essere l'esempio con cui stai lavorando).
Come scorrere attraverso una lista
#! / bin / bashfor numero in 1 2 3 4 5doecho $ numberdoneexit 0
Il modo BASH di usare loop "for" è in qualche modo diverso dal modo in cui la maggior parte degli altri linguaggi di programmazione e scripting gestiscono cicli "for". Rompiamo la sceneggiatura. In un BASH "per" tutto il ciclo, le istruzioni tra fare e fatto vengono eseguiti una volta per ogni elemento nell'elenco. Nell'esempio sopra, la lista è tutto ciò che viene dopo la parola nel (cioè 1 2 3 4 5). Ogni volta che il ciclo itera, il successivo valore nell'elenco viene inserito nella variabile specificata dopo la parola "per" . Nel ciclo precedente, la variabile viene chiamata numero . L'istruzione echo viene utilizzata per visualizzare le informazioni sullo schermo. Pertanto, questo esempio prende i numeri da 1 a 5 e li visualizza uno alla volta sullo schermo: Il problema con l'esempio precedente è che se si desidera elaborare una lista più grande (da 1 a 500), occorrerebbero anni per digitare tutti i numeri in primo luogo. Questo ci porta al secondo esempio che mostra come specificare un punto iniziale e finale: #! / bin / bashfor numero in {1..10} doecho "$ number" doneexit 0
Le regole sono fondamentalmente le stesse. I valori dopo la parola " nel" compila la lista per scorrere e ogni valore nella lista è posto nella variabile (cioè il numero), e ogni volta che il ciclo itera, le istruzioni tra fare e fatto sono eseguite. La principale differenza è il modo in cui la lista è formata. Le parentesi graffe {} indicano fondamentalmente un intervallo e l'intervallo, in questo caso, è compreso tra 1 e 10 (i due punti separano l'inizio e la fine di un intervallo). Questo esempio, quindi, scorre attraverso ogni numero compreso tra 1 e 10 e visualizza il numero sullo schermo come segue: Lo stesso ciclo potrebbe essere stato scritto in questo modo, con la sintassi identica al primo esempio: per numero in 1 2 3 4 5 6 7 8 9 10 L'esempio precedente mostrava come effettuare il loop tra un punto iniziale e uno finale, quindi ora vedremo come saltare i numeri nell'intervallo. Immagina di voler fare il ciclo tra 0 e 100 ma mostrare solo ogni decimo numero. Il seguente script mostra come fare proprio questo: #! / bin / bashfor numero in {0..100..10} doecho "$ number" doneexit 0
Le regole sono fondamentalmente le stesse. C'è una lista, una variabile e un insieme di istruzioni da eseguire tra fare e fatto . L'elenco questa volta appare così: {0..100..10}. Il primo numero è 0 e il numero finale è 100. Il terzo numero (10) è il numero di elementi nell'elenco che salterà. L'esempio sopra, quindi, visualizza il seguente output: Il modo BASHE di scrivere per i loop è leggermente strano se confrontato con altri linguaggi di programmazione. Puoi, comunque, scrivere un ciclo for in uno stile simile al linguaggio di programmazione C, come questo: #! / bin / bashfor ((numero = 1; numero <100; numero ++)) {if (($ numero% 5 == 0)) thenecho "$ numero è divisibile per 5" fi} exit 0
Il ciclo inizia impostando il numero variabile su 1 (numero = 1 ). Il ciclo continuerà a scorrere mentre il valore di un numero è inferiore a 100 ( numero <100 ). Il valore di numero cambia aggiungendo 1 ad esso dopo ogni iterazione ( numero ++ ). Tutto tra le parentesi graffe viene eseguito attraverso ogni iterazione del ciclo. Il bit tra le parentesi graffe controlla il valore di a numero , lo divide per 5 e confronta il resto con 0. Se il resto è 0, il numero è divisibile per 5 e viene quindi visualizzato sullo schermo. Per esempio: Se si desidera modificare la dimensione del passo dell'iterazione, è possibile modificare la sezione numero ++ in modo che sia number = number + 2 , number = number + 5 , o number = numero + 10 eccetera. Questo può essere ulteriormente ridotto a Numero + = 2 o numero + = 5 . Perché i loop possono fare più dell'iterazione di elenchi di numeri. È possibile utilizzare effettivamente l'output di altri comandi come elenco. L'esempio seguente mostra come convertire i file audio da MP3 a WAV: #! / Bin / bashper file in ./*.mp3dompg -w ./wavs/"${file}".wav "$ file" fatto
L'elenco in questo esempio è ogni file con estensione .MP3 nella cartella corrente e la variabile è a file . Il mpg comando converte il file MP3 in WAV. Tuttavia, probabilmente è necessario installarlo utilizzando prima il gestore dei pacchetti.
Come eseguire il ciclo tra un punto iniziale e uno finale
Come saltare numeri in un intervallo
Un ciclo di ricerca più tradizionale
Un esempio pratico