GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Scripting Part2 – Cicli For e While con esempi

Nella prima parte di questo tutorial di Bash Scripting, abbiamo discusso di come scrivere uno script Bash. Abbiamo esplorato i vari usi e gli scenari unici in cui gli script Bash possono tornare utili, fornendo un ottimo esempio di quanto possano essere incredibili.

In questa parte del tutorial, daremo un'occhiata al for comando e il while comando. Mostreremo come possiamo usare questi comandi per creare loop per iterare su una serie di valori.

Il ciclo For

In Linux, un ciclo è ciò che usiamo per eseguire ripetutamente i comandi a un intervallo specificato. I loop vengono utilizzati in un'ampia varietà di linguaggi di programmazione per lo stesso scopo.

Esistono diversi tipi di loop in Linux, ma in questa sezione dell'articolo ci concentreremo sul for ciclo.

#!/bin/bash

 for y in a b c d w x y z 

> do

> echo $y

done

Come puoi vedere nello screenshot qui sopra, abbiamo attribuito la variabile "y" - che è solo un segnaposto privo di significato usato per il bene del comando - ad alcune lettere dell'alfabeto.

Abbiamo quindi passato quella variabile a echo comando, ed è stato in grado di produrre le nostre lettere di seguito.

Esecuzione su valori semplici

Possiamo usare il for comando in uno script Bash. Per fare ciò, dobbiamo prima creare un file di testo nel nostro terminale Linux. Puoi utilizzare il touch comando per creare facilmente file di testo.

$ touch script

La sintassi sopra creerà un file di testo che chiameremo "script". Assicurati di creare il tuo file di testo utilizzando il .sh estensione del file. Dopo aver creato script , vorremo modificare il nostro vero script contenente il for comando.

Possiamo raggiungere questo obiettivo eseguendo un paio di diversi comandi di modifica dei file di testo, come nano comando e il vi comando, ecc.

Ma ti consigliamo di utilizzare solo nano , poiché è uno degli editor di testo dei comandi più semplici e facili da usare in Linux.

$ nano script

La sintassi sopra aprirà il nostro script nell'editor di testo nano. Qui, vorremo digitare il nostro script.

Nota che questo file di testo deve contenere #!/bin/bash , che informa lo script Bash su quale shell utilizzare, quindi è un componente fondamentale per creare correttamente uno script Bash.

#!/bin/bash

for var in first second third fourth fifth; do

	echo The $var item

done

Esecuzione su valori complessi

Nell'esempio precedente, abbiamo mostrato come usare for comando per eseguire l'iterazione su valori semplici in uno script Bash creato dall'utente. La parola semplice qui si riferisce a valori che contengono solo una singola parola.

Ma a volte avrai un elenco che include, invece di quello che abbiamo visto nell'esempio precedente con "first" - qualcosa sulla falsariga di "the first", che contiene più di una parola per un singolo valore. Questi valori sono quelli che chiamiamo valori "complessi".

Se il tuo elenco ha questi valori complessi, dovrai farvi riferimento racchiudendoli tra virgolette, in modo che lo script capisca che si tratta solo di un valore.

#!/bin/bash

for var in first "the second" "the third" "I’ll do it"; do

	echo "This is: $var"

done

Sostituzione dei comandi

Possiamo anche usare la sostituzione dei comandi nel nostro for comando nel nostro script Bash.

#!/bin/bash

my_file="file01"

for var in $(cat $my_file); do

        echo " $var"

done

Qui abbiamo usato la sostituzione dei comandi con una subshell Bash, come si vede dall'uso del comando cat all'interno di $( ); questo ci permette di usare l'output del cat comando e ottieni il contenuto del file supponendo che ogni riga abbia una parola.

Ma se ci sono spazi in una di queste righe, ogni parola sarà considerata un campo. In questo caso, dovrai dire alla shell di trattare le nuove righe come un separatore invece degli spazi.

Il separatore di campo

Per impostazione predefinita, i seguenti caratteri sono considerati campi dalla shell Bash.

  • Spazio
  • Scheda
  • nuova linea

Se il tuo testo include uno di questi caratteri, la shell presumerà che si tratti di un nuovo campo e dovrai modificare il separatore di campo interno o la variabile di ambiente IFS se devi utilizzare questi caratteri.

$ IFS=$’n’

La sintassi precedente farà sì che la shell Bash consideri le nuove righe come un separatore invece che come uno spazio.

#!/bin/bash

file="/etc/passwd"

IFS=$'n'

for var in $(cat $file); do

	echo " $var"

done

Puoi anche assegnare il separatore di campo ai due punti con IFS come mostrato di seguito.

$ IFS=:

Abbastanza fantastico, eh?

Esecuzione su file di directory

Puoi anche usare il for loop in uno script Bash per elencare i file nella tua home directory.

#!/bin/bash

for obj in /home/ubuntu/*; do

	if [ -d "$obj" ]; then

		echo "$obj is a folder"

	elif [ -f "$obj" ]; then

		echo "$obj is a file"

	fi

done

Questo processo richiede l'utilizzo di if istruzione per controllare file e cartelle. Ma questo non dovrebbe rappresentare un grosso problema per te se hai letto il post precedente. Ma se per caso hai bisogno di un aggiornamento, ti consiglio di rivederlo.

Abbiamo utilizzato un carattere jolly chiamato asterisco (*) nel nostro script Bash che contiene un for loop che ci permette di elencare i file e le cartelle nella nostra home directory. In Bash scripting, questo processo è chiamato "globbing di file .” File globbing significa tutti i file esistenti con un nome.

Nota che le variabili nel nostro if istruzione sono scritti tra virgolette perché i nomi di file o cartelle possono contenere spazi. Se avessimo omesso questo passaggio, avremmo potuto non essere in grado di elencare tutti i file e le directory.

Esegui l'iterazione sulle righe del file

Possiamo usare il for ciclo in uno script Bash per scorrere il contenuto del file:

#!/bin/bash

IFS=$'n'

for text in $(cat /etc/passwd); do

	echo "This line $text ++ contains"

	IFS=:

	for field in $text; do

		echo " $field"

	done
done

Qui abbiamo due cicli, il primo ciclo itera sulle righe del file e il separatore è la nuova riga, la seconda iterazione è sulle parole sulla riga stessa e il separatore sono i due punti:

dati del file

Puoi applicare questa idea quando hai un CSV o qualsiasi file di valori separati da virgole. L'idea è la stessa; devi solo cambiare il separatore in base alle tue esigenze.

Per loop C-Style

Se hai familiarità con il linguaggio C, potresti notare che c'è qualcosa di strano in for loop in Linux a volte.

Questo perché esistono due modi per scrivere for anelli; la modalità standard di Linux, di cui abbiamo già parlato all'inizio di questo tutorial, e la modalità "C-style".

for (var= 0; var < 5; var++)

{

printf(“number is %dn”, var);

}

La sintassi sopra è per for ciclo scritto in C. Lo stile C for loop in Linux è scritto in modo molto simile a questo con alcune piccole modifiche, che possono essere osservate di seguito.

for (( variabile =inizio; condizione; passaggio di iterazione))

for (( var = 1; var < 5; var++ ))

Per aiutare a dipingere meglio l'immagine, includeremo uno script Bash di esempio utilizzando lo stile C for loop nel nostro terminale Linux.

#!/bin/bash

for ((var = 1; var <= 10; var++)); do

	echo "number is $var"

done

Mettilo nel nostro file di testo e accendilo.

Il comando Continua

La Bash continue command ignora i comandi all'interno del ciclo esterno per l'iterazione corrente e dà il controllo a quella successiva. Puoi usare questo comando per interrompere l'esecuzione dei comandi rimanenti all'interno di un ciclo senza uscire dal ciclo.

Nei prossimi due esempi, analizzeremo come questo comando può essere utilizzato nei cicli di scripting Bash in Linux.

Il comando di rottura

Puoi usare il comando break per uscire da qualsiasi ciclo, come i cicli while e until.

#!/bin/bash

for number in 10 11 12 13 14 15; do

	if [ $number -eq 14 ]; then

		break

	fi

	echo "Number: $number"

done

Il ciclo viene eseguito fino a raggiungere 14, quindi il comando esce dal ciclo.
Vedremo altri esempi di questo comando un po' più avanti.

Il ciclo While

Il ciclo for non è l'unico modo per eseguire il ciclo negli script Bash. Il while loop fa lo stesso lavoro, ma verifica una condizione prima di ogni iterazione. La struttura del while loop può essere visto di seguito.

while [ condition ]

do

    commands

done

Forniremo un esempio con uno script Bash.

#!/bin/bash

number=10

while [ $number -gt 4 ]; do

	echo $number

	number=$(($number - 1))

done

Il modo in cui funziona questo script Bash è semplice; inizia con il while comando per verificare se il numero è maggiore di zero, quindi eseguirà il ciclo e il valore del numero verrà diminuito ogni volta di 1. Ad ogni iterazione del ciclo, lo script stamperà il valore del numero. Il ciclo verrà eseguito finché quel numero non raggiunge 0.

Loop nidificati

Puoi creare loop all'interno di altri loop, come il while ciclo per esempio. Questi cicli all'interno di un ciclo sono chiamati cicli annidati. Analizzeremo questi aspetti esaminando prima come creare un for nidificato ciclo nel seguente esempio.

Cicli for multipli (nidificati per)

Negli esempi precedenti finora in questo tutorial, abbiamo mostrato come creare for loop in uno script Bash in Linux. Ma esiste anche qualcosa che chiamiamo for annidato loop. Questi sono loop all'interno di altri loop, o semplicemente loop multipli, per dirla semplicemente.

Ti mostreremo un semplice esempio di come appare, insieme a un breve esame e una descrizione in basso.

for y in a b c d e f

do

    for u in a b c d e f

    do

        echo "$y$u"

    done

done

Come puoi vedere nello screenshot qui sopra, l'output che riceviamo eseguendo il nostro script nel terminale della riga di comando di Linux è il seguente:il nostro testo di esempio in ogni for loop è “a b c d e f”.

Quello che fa il nostro script è fare eco al testo nel ciclo esterno insieme al testo del ciclo interno.

Lo script continua a produrre il primo campo (in questo caso gli spazi, lo spiegheremo un po' più avanti) del testo nel ciclo esterno fino a quando non sono stati emessi tutti i campi contenuti nel ciclo interno.

Al completamento dell'output del ciclo interno, il nostro script Bash inizierà quindi a produrre il seguente campo di testo nel ciclo esterno.

L'intero processo verrà ripetuto fino a quando ogni campo di ogni ciclo non sarà stato completamente stampato nell'output nel tuo terminale Linux.

Ciclo while multiplo (nidificato while)

Come il for annidato cicli di comando, esiste anche while nidificato cicli di comando. Funzionano esattamente come i cicli annidati per for comando; un ciclo all'interno di un altro ciclo.

La sintassi seguente avrà una sorprendente somiglianza con il normale while loop, come la struttura di un while annidato loop è semplicemente una forma espansa della base while loop, che può essere osservato nella sintassi seguente.

while [condition]

do 

  statements1 

  statements2

  while [condition]

do

  continue

done

  statements3

done

La sintassi sopra eseguirà attività specificate fino a quando le condizioni che hai selezionato non saranno soddisfatte. Questo è ciò che viene chiamato un ciclo. Ma poiché il ciclo nell'esempio sopra è nidificato, ciò significa che una delle attività che abbiamo menzionato sopra è un altro ciclo stesso.

Mentre Avanti

Abbiamo mostrato come il while loop e il for loop può essere molto utile per eseguire processi complessi usando gli script Bash in Linux.

Ma a volte, per vari motivi, dovrai eliminare uno dei loop nel tuo script Bash. Questo scenario, per quanto brutale possa sembrare, si verifica spesso nel lavoro di amministrazione del sistema. Quindi, potresti voler familiarizzare con questo concetto.

Nella shell Bash, il break comando e il comando continue command può fornire gli strumenti necessari per controllare il flusso dei tuoi cicli di script Bash.

Mostreremo come funzionano questi comandi individualmente con un paio di esempi di seguito.

La sintassi per l'utilizzo di brea comando per uscire da un while il ciclo è il seguente:

$  while [ condition ]
do
    commands
continue
done

Il continue comando break i comandi funzionano in modo molto simile e possono essere considerati opposti l'uno all'altro; il continue il comando funziona esattamente come break comando, solo che continua il ciclo invece di ucciderlo.

Esci durante il ciclo

La break comando uccide il ciclo corrente e dà il controllo al comando successivo che segue quel ciclo. Puoi utilizzare questo processo per uscire da loop come for ,while , ecc. La sintassi di break il comando è il seguente:

$ while [ condition ]
do
    commands
break
done

Ma come accennato in precedenza, entrambi i continue comando e il break il comando può essere utilizzato per altri cicli di script Bash oltre a while ciclo continuo. Mostreremo come usarli nel for ciclo.

Esci dal ciclo

Puoi usare questi comandi di controllo del ciclo in un for ciclo continuo. Useremo il break comando per uscire da for ciclo nel nostro script Bash.

#!/bin/bash

for number in 10 11 12 13 14 15; do

	if [ $number -eq 14 ]; then

		break

	fi

	echo "Number: $number"

done

Il for il ciclo viene eseguito finché non raggiunge il numero specificato nello script bash, che è 14. Al raggiungimento del numero specificato, il break il comando uscirà da for ciclo.

Dichiarazione Break If

Abbiamo appena mostrato come possiamo usare break comando per uscire da for loop, ma possiamo anche usare questo comando per uscire da if istruzione all'interno di questi cicli di script Bash.

i=0

while [[ $i -lt 10 ]]

do

  echo "Number: $i"

  ((i++))

  if [[ $i -eq 5 ]]; then

    break

  fi

done

Continua dichiarazione

Facciamo la stessa cosa che abbiamo fatto nell'esempio precedente con continue comando come abbiamo fatto con il break comando in un while ciclo in uno script Bash.

i=0

while [[ $i -lt 10 ]]; do

  ((i++))

  if [[ "$i" == '5' ]]; then

    continue

  fi

  echo "Number: $i"

done

Pensieri conclusivi

Spero che tu abbia imparato una o due cose nuove. O, almeno, spero che tu sia stato in grado di rivedere ciò che già sai. Le mie ultime parole oggi per te sarebbero:continuare a leggere e fare pratica.

Grazie.


Linux
  1. Bash HereDoc Tutorial con esempi

  2. Bash For Loop Guida ed esempi

  3. Scripting Linux:3 istruzioni per i cicli while in Bash

  4. Esempi di Bash For Loop e While Loop

  5. '&&' vs. '&' con il comando 'test' in Bash

Bash Scripting – For Loop spiegato con esempi

Bash Scripting:funzioni spiegate con esempi

Bash Scripting:variabili spiegate con esempi

Scripting Bash – Spiegazione del comando Printf con esempi

Bash Scripting – Array associativo spiegato con esempi

Bash For Loops con esempi