GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Scripting Tutorial per principianti:cos'è, come scriverne uno ed esempi di script

Se hai mai utilizzato un sistema operativo Linux come la maggior parte dei server privati ​​virtuali, potresti aver sentito parlare di bash. È una shell Unix che legge ed esegue vari comandi.

Quando devi eseguire diversi comandi bash, non devi eseguirli manualmente uno alla volta. Invece, è possibile creare un file di script che contenga funzioni bash per eseguire quei comandi.

Può sembrare complicato, ma imparando le sue basi capirai il linguaggio di scripting bash e scoprirai come può aiutare il tuo flusso di lavoro.

Questo articolo tratterà il processo di scripting bash. Esamineremo tutto, dai comandi bash all'esecuzione di un programma bash su un terminale Linux.

Cos'è Bash?

Bash, abbreviazione di Bourne-Again Shell , è una shell Unix e un interprete del linguaggio dei comandi. Legge i comandi della shell e interagisce con il sistema operativo per eseguirli.

Per comprendere appieno lo scripting della shell bash, devi conoscere due concetti:shell e script .

Shell è un macro processore che utilizza i comandi per interagire con il sistema operativo. Ciò significa che può recuperare, elaborare e archiviare informazioni su un computer.

Nel frattempo, lo scripting è il processo di compilazione dei comandi della shell in un nuovo file utilizzando un editor di testo.

Quando scrivi bash in un editor di testo, stai compilando comandi bash o funzioni bash – un insieme di comandi che possono essere richiamati più volte utilizzando solo il nome della funzione. Il testo viene quindi salvato come script bash eseguibile file con .sh estensione.

Perché usare Bash Scripting?

Gli script Bash possono aiutarti con il tuo flusso di lavoro poiché compilano molti comandi lunghi in un unico file di script eseguibile.

Ad esempio, se hai più comandi da eseguire a un intervallo di tempo specifico, puoi compilare uno script bash invece di digitare ed eseguire i comandi manualmente uno per uno. Devi eseguire il file di script solo quando è necessario.

Ecco alcuni altri vantaggi dell'utilizzo degli script bash:

  • Comandi ben strutturati – struttura i comandi in una sequenza in modo che ogni volta che esegui lo script, questo venga eseguito nell'ordine corretto.
  • Automazione delle attività – automatizzare l'esecuzione dello script in qualsiasi momento definito utilizzando lo scheduler basato sul tempo di cron.
  • Trasparenza – le persone possono controllare il contenuto di uno script poiché è in un file di testo leggibile. Tuttavia, se esegui i comandi utilizzando un altro programma scritto in un linguaggio di programmazione diverso, come C++, dovrai accedere al codice sorgente.
  • Trasferibile – se trasferisci uno script su altre distribuzioni Linux, funzionerà comunque, a condizione che i comandi della shell siano disponibili su quel particolare sistema operativo.

Acquisisci familiarità con i comandi Bash

Bash è disponibile su quasi tutti i tipi di sistemi operativi basati su Unix e non richiede un'installazione separata. Avrai bisogno di una riga di comando Linux, nota anche come terminale Linux. È un programma che contiene la shell e ti consente di eseguire script bash.

Usa questo comando per controllare l'elenco delle shell disponibili sul tuo sistema operativo Unix:

gatto /etc/shells

L'output dovrebbe mostrare un elenco come questo:

/bin/bash/bin/sh/bin/tcsh/bin/csh

Ogni script della shell bash deve iniziare con #! seguito dal percorso assoluto all'interprete bash. Per visualizzare il percorso, inserisci questo comando:

quale festa

Dovrebbe produrre il seguente output:

/bin/bash

Questo è il percorso standard per l'interprete bash sulla maggior parte dei sistemi operativi Unix. Per far sapere alla shell che dovrebbe eseguire comandi usando l'interprete bash, avvia lo script con questa riga:

#!/bin/bash

Importante! Se vuoi eseguire script bash su un server privato virtuale, connettiti ad esso tramite un client SSH.

Il passaggio successivo consiste nello scrivere e compilare i comandi in un .sh file utilizzando un editor di testo. Avrai bisogno di un editor di testo Unix come VIM o GNU Nano. In questo tutorial utilizzeremo il Nano editor di testo per creare il file inserendo questo comando:

nano function.sh

Verrà aperto un nuovo .sh file da modificare. Inizia scrivendo #!/bin/bash seguito dai comandi bash.

Importante! Una volta terminato di utilizzare l'editor di testo Nano, premi Ctrl+X per chiuderlo, quindi premi Y e Invio per salvare le modifiche.

Comandi di base di Bash per il tuo primo script Bash

Per creare correttamente il tuo primo script bash, devi comprendere i comandi bash essenziali. Sono gli elementi principali di una sceneggiatura e devi sapere cosa fanno e come scriverli correttamente.

Ci sono molti comandi bash su Linux. Per iniziare, ne tratteremo sette di base.

1. Commenti

I commenti presentano una descrizione su determinate righe dello script. Il terminale non analizza i commenti durante l'esecuzione, quindi non influiranno sull'output.

Esistono due modi per aggiungere commenti a uno script. Il primo metodo consiste nel digitare # all'inizio di un commento a riga singola.

#!/bin/bash#Il comando in basso stampa un textecho Hello World "Hello, world!"

Il secondo metodo consiste nell'usare : seguito da ' . Questo metodo funziona per commenti su più righe.

#!/bin/bashread a:' I seguenti comandi printHello, world!'echo "Hello, World!"

2. Variabili

Le variabili sono simboli che rappresentano un carattere, stringhe di caratteri o numeri. Devi solo digitare il nome della variabile in una riga di comando per utilizzare le stringhe o i numeri definiti.

Per assegnare una variabile, digita il nome della variabile e il valore della stringa come qui:

testvar="Questa è una variabile di test"

In questo caso, testvar will è il nome della variabile e Questa è una variabile di test è il valore della stringa. Quando si assegna una variabile, si consiglia di utilizzare un nome di variabile facile da ricordare e che ne rappresenti il ​​valore.

Per leggere il valore della variabile nella riga di comando, usa $ simbolo prima del nome della variabile. Dai un'occhiata all'esempio seguente:

#!/bin/bashtestvar=“Questa è una variabile di test”echo $testvar

La seconda riga di comando utilizza echo per stampare il valore di testvar . L'output di quello script sarà:

Questa è una variabile di test

Diamo un'occhiata a come inserire un valore di stringa utilizzando la lettura comando e fare in modo che lo script confronti due valori di stringa da variabili diverse:

#!/bin/bash 
echo “Inserisci un numero”
read a #L'input dell'utente in questa riga di comando verrà memorizzato come variabile a
b=50 #Il valore della variabile b
se [[$a -eq $b]]
poi
eco “Stesso numero”
altro
echo “Numero diverso”
fi

L'output di quello script dovrebbe essere il seguente:

Inserisci un numero 
20
Numero diverso

Tieni presente che riga 3 è il valore che diventa variabile a .

Lo script confronta la variabile a con il valore 20 e la variabile b con il valore 50 . Poiché i valori sono diversi, lo script stampa Numero diverso .

Tuttavia, se l'utente inserisce 50 , questo sarà l'output:

Inserisci un numero 
50
Stesso numero

Questo esempio utilizza anche istruzioni condizionali, di cui parleremo più avanti.

3. comando eco

eco è un noto comando utilizzato in molti linguaggi di programmazione. Ci sono varie opzioni che puoi usare con echo per stampare l'output sul terminale.

Il primo e più comune utilizzo di echo è l'output di testo standard:

#!/bin/bash 
echo "Ciao, mondo!"

L'output di quel comando è Hello, World! Per impostazione predefinita, quando si utilizza il comando echo in questo modo, il terminale inserirà una nuova riga al di sotto. Se desideri eseguire l'eco di un output senza una nuova riga, puoi farlo utilizzando -n .

#!/bin/bash 
echo -n "Ciao, mondo!"

Usa l'opzione \n per introdurre un'interruzione di riga nell'output. Per abilitare la barra rovesciata (\) , devi includere -e .

#!/bin/bash 
echo -e "Ciao, \nmondo!"

L'output di quel comando sarà simile a questo:

Ciao, 
mondo!

L'opzione \t aggiunge uno spazio di tabulazione orizzontale:

#!/bin/bash 
echo -e "\tCiao, mondo!"

L'output di questo comando indenterà il testo a destra:

 Ciao, mondo!

Puoi anche combinare diverse opzioni. Ad esempio, combina \n e \t per suddividere il testo in righe e far rientrare il testo a destra:

#!/bin/bash 
echo -e “\n\tCiao, \n\tmondo!”

L'output di quel comando sarà simile a questo:

 Ciao, mondo! 

4. Funzioni

Una funzione compila un insieme di comandi in un gruppo. Se hai bisogno di eseguire nuovamente il comando, scrivi semplicemente la funzione invece dell'intero set di comandi.

Esistono diversi modi per scrivere le funzioni.

Il primo modo è iniziare con il nome della funzione e seguirlo con parentesi e parentesi:

nome_funzione () { 
primo comando
secondo comando
}

Oppure, se vuoi scriverlo in una sola riga:

nome_funzione () { primo comando; secondo comando; }

Il secondo metodo per scrivere una funzione è utilizzare la parola riservata funzione seguito dal nome della funzione. Questo elimina la necessità di parentesi:

nome_funzione { 
primo comando
secondo comando
}

Questo metodo ha anche una versione a riga singola:

funzione nome_funzione { primo comando; secondo comando; }

Ad esempio, possiamo scrivere due funzioni con più eco comandi:

#!/bin/bash 
Ciao mondo () {
eco "Ciao, mondo!"
echo "Questa è una funzione di test"
}
messaggio_stampa () {
echo "impariamo a programmare bash"
echo “Goditi questo tutorial”
}

Si noti che scrivere le funzioni come nell'esempio sopra le definisce e non esegue i comandi contenuti. Per eseguire una funzione, inserisci il suo nome nella riga di comando.

Ora, utilizziamo i due esempi precedenti in una funzione bash completa, inclusa la sua esecuzione:

#!/bin/bash 
#Definisci una funzione ciao mondo
Ciao mondo () {
eco "Ciao, mondo!"
echo "Questa è una funzione di test"
}
#Definire una funzione di stampa del messaggio
messaggio_stampa () {
echo "impariamo a programmare bash"
echo “Goditi questo tutorial”
}
#Esegui la funzione ciao mondo
Ciao mondo
#Esegui la funzione di stampa del messaggio
messaggio_stampa

Questo è l'output dello script sopra:

Ciao, mondo! 
Questa è una funzione di test
Impariamo a programmare bash
Goditi questo tutorial

5. Cicli

I comandi loop bash sono utili se vuoi eseguire comandi più volte. Ci sono tre tipi che puoi eseguire in bash:per , mentre e fino a .

Il per loop esegue il comando per un elenco di elementi:

#!/bin/bash 
per l'elemento in [elenco]
fare
[comandi]
fatto

L'esempio seguente utilizza un per loop per stampare tutti i giorni della settimana:

#!/bin/bash 
per giorni lunedì martedì mercoledì giovedì venerdì sabato domenica
fare
echo “Giorno:$giorni”
fatto

Sulla riga 2 , "giorni" diventa automaticamente una variabile, con i valori che sono i nomi dei giorni che seguono. Quindi, nell'eco comando, usiamo il $ simbolo per chiamare i valori delle variabili.

L'output di quello script sarà il seguente:

Giorno:lunedì 
Giorno:Martedì
Giorno:mercoledì
Giorno:giovedì
Giorno:venerdì
Giorno:sabato
Giorno:domenica

Nota che anche con una sola riga di comando nello script di ciclo, vengono stampati sette echo uscite.

Il prossimo tipo di ciclo è mentre . Lo script valuterà una condizione. Se la condizione è vera , continuerà a eseguire i comandi fino a quando l'output non soddisfa più la condizione definita.

#!/bin/bash 
mentre [condizione]
fare
[comandi]
fatto

Diamo un'occhiata a un semplice esempio che coinvolge una variabile e un operatore di incremento, indicato come ((++)) :

#!/bin/bash 
io=0
mentre [ $i -le 5 ]
fare
eco $i
((i++))
fatto

La variabile inizia con uno 0 valore e l'operatore di incremento lo aumenterà di uno. La condizione impostata è minore o uguale a cinque, quindi il comando continuerà a scorrere finché l'output non raggiunge cinque. L'output di quello script sarà il seguente:

0
1
2
3
4
5

L'ultimo tipo di ciclo, fino a , è l'opposto di mentre . Itererà il comando finché la condizione non diventa vera.

Se vogliamo lo stesso output del while esempio sopra utilizzando fino a loop, possiamo scrivere lo script in questo modo:

#!/bin/bash 
io=0
fino a [ $i -gt 5 ]
fare
eco $i
((i++))
fatto

Ora, questo comando eseguirà l'iterazione finché il valore di output non raggiunge cinque. L'output sarà lo stesso del nostro esempio con il while ciclo:

0
1
2
3
4
5

6. Dichiarazioni condizionali

Molti linguaggi di programmazione, incluso bash, utilizzano istruzioni condizionali come if , allora e altro per il processo decisionale. Eseguono comandi e stampano gli output a seconda delle condizioni.

Il se istruzione è seguita da un'espressione condizionale. Successivamente, è seguito da quindi e il comando per definire l'output della condizione. Lo script eseguirà il comando se la condizione espressa in if l'affermazione è vera.

Tuttavia, se desideri eseguire un comando diverso se la condizione è falsa, aggiungi un altro istruzione allo script e seguirlo con il comando.

Diamo un'occhiata al semplice se , allora e altro dichiarazioni. Prima dell'istruzione, includeremo una variabile in modo che l'utente possa inserire un valore:

#!/bin/bash 
echo “Inserisci un numero”
leggi num
se [[$num -gt 10]]
poi
echo “Il numero è maggiore di 10”
altro
echo “Il numero non è maggiore di 10”

7. Lettura e scrittura di file

Esistono diversi metodi per leggere un file, con il cat il comando è il più popolare. Nota che questo comando legge il intero contenuto del file.

Per leggere il contenuto riga per riga, usa leggi comando e un ciclo. Prima di scrivere uno script per leggere un file, assicurati che il file esista.

Nell'esempio seguente, abbiamo un to-do.txt file che contiene un elenco di cose da fare:

E-mail di risposta 
Termina il rapporto
Chiama i clienti
Valutazione della squadra

Useremo il gatto e leggi comandi nella nostra funzione bash per leggere e stampare il contenuto di to-do.txt file. La prima parte dello script utilizzerà il cat comando, mentre la seconda parte utilizzerà il comando leggi comando in un ciclo.

#!/bin/bash 
echo "Leggere il file usando il comando cat"
content='cat to-do.txt'
eco $ contenuto
echo "Lettura del file utilizzando il comando di lettura e il ciclo"
nomefile='da-fare.txt'
durante la lettura della riga
fare
eco $linea
fatto<$nomefile

L'output dello script sarà il seguente:

Lettura del file usando il comando cat 
E-mail di risposta Termina rapporto Chiama i clienti Valutazione del team
Lettura del file utilizzando il comando read e il ciclo
E-mail di risposta
Termina il rapporto
Chiama i clienti
Valutazione della squadra

Per scrivere l'output di un comando in un file, utilizza gli operatori di reindirizzamento, rappresentati con > e >> simboli e seguirli con il nome del file:

output> nome file 
output>> nomefile

Fare attenzione nella scelta dell'operatore. Se il file esiste, > l'operatore ne sovrascriverà il contenuto con una stringa di lunghezza zero. Significa che perderai il contenuto del file esistente. Se il nome del file immesso non esiste, lo creerà.

Il >> operatore, d'altra parte, aggiungerà l'output al file specificato.

Ecco un semplice reindirizzamento per scrivere l'output in un file di testo:

eco "Ciao, mondo!">> ciao_mondo.txt

Il reindirizzamento funziona anche con lettura comando per scrivere qualsiasi input dell'utente. Questo esempio di script aggiungerà il valore di input a name.txt file:

#!/bin/bash 
eco "Inserisci il tuo nome"
leggi Nome
echo $Nome>> nome.txt

Poiché lo script reindirizza l'output della variabile nel file, non vedrai alcun output stampato. Per vedere l'output stampando il contenuto del file, aggiungi la seguente riga di comando per leggere il file:

eco 'nome gatto.txt'

Assicurati di avere l'autorizzazione per leggere e scrivere nel file per evitare che autorizzazione negata errore. Se desideri aggiungere l'output a file esistenti, assicurati di digitare i nomi di file corretti.

4 funzioni facili da provare sul tuo primo script Bash

Ora che conosciamo alcuni comandi bash, esamineremo esempi di funzioni bash più basilari per il tuo primo script.

Come accennato in precedenza, quando vuoi scrivere un file di script bash, usa il comando nano filename.sh per creare e aprire un .sh file e inizia a scrivere le tue funzioni bash. Non dimenticare di uscire e salvare il file quando hai finito.

Inizia con una semplice funzione eco

Iniziamo con una semplice funzione eco. Inizia definendo il nome della funzione seguito dal comando echo nella riga successiva, proprio come nell'esempio seguente:

#!/bin/bashtestfunction() {echo “My first function”}testfunction

Salva questo script in testFunction.sh . Quando esegui lo script sulla riga di comando, dovresti vedere il seguente output:

La mia prima funzione

Tenere presente che se si scambia la posizione della definizione della funzione con la chiamata della funzione, si verificherà un errore. Vediamo l'esempio seguente:

#!/bin/bash 
funzione di prova
funzione di prova(){
echo “La mia prima funzione”
}

Questo frammento non funzionerà. Chiama la funzione nella seconda riga di comando e definisce la funzione in un secondo momento. In questo caso, l'interprete non riesce a trovare la funzione quando esegue lo script, risultando in un comando non trovato errore.

Utilizza pochi parametri

Le funzioni Bash accettano un numero qualsiasi di parametri. L'esempio seguente accetta due parametri:

#!/bin/bash 
funzione di prova () {
eco $ 1
eco $ 2
}
funzione di prova “Ciao” ​​“Mondo”

$ 1 rappresenta il primo argomento mentre $ 2 rappresenta il secondo argomento nella riga di esecuzione della funzione. Come abbiamo usato "Ciao" e "Mondo" per gli argomenti, l'output sarà simile a questo:

Puoi anche usare gli argomenti della riga di comando ed eseguire funzioni bash. Uno di questi esempi è mostrato di seguito:

#!/bin/bash 
aggiunta () {
somma=$(($1+$2))
restituire $ somma
}
read -p "Inserisci un numero:" int1
read -p "Inserisci un numero:" int2
aggiunta $int1 $int2
echo "Il risultato è:" $?

L'addizione viene assegnata in una variabile somma , e questo viene restituito dalla funzione. Le funzioni Bash restituiscono sempre un singolo valore. L'input dell'utente viene preso utilizzando lettura per entrambi i numeri. Infine, il risultato viene stampato utilizzando $? che memorizza il valore restituito $sum dalla funzione.

Crea directory e cambia percorsi

Ora, diamo un'occhiata a un altro esempio di funzione in cui creiamo prima una directory e quindi cambiamo il percorso in modo che punti a una nuova posizione. Questa funzione conterrà mkdir e cd Comandi Linux per creare una nuova directory e modificare la directory corrente:

#!/bin/bashsampleFunction () {mkdir -p $1cd $1}sampleFunction myDir

La funzione leggerà il primo argomento e creerà una directory con quel nome. Dopo aver eseguito lo script, controlla il percorso di lavoro attuale utilizzando il pwd comando sul terminale. Vedrai che sei attualmente all'interno della myDir appena creata .

Combina loop e condizionali

Anche i loop e le istruzioni condizionali sono popolari negli script bash. Esamineremo alcuni casi di utilizzo di entrambi nello stesso script:

#!/bin/bash 
è valido=vero
contare=1
mentre [ $è valido ]
fare
eco $ conteggio
se [ $ conteggio -eq 5 ];
poi
rompere
fi
((conteggio++))
fatto

L'esempio sopra utilizza while e se dichiarazioni. Questo viene eseguito il mentre ciclo cinque volte dopo aver controllato l'istruzione condizionale.

L'output di questo script sarà:

1
2
3
4
5

Il per loop può incrementare e decrementare i contatori. Un esempio di per il ciclo è mostrato di seguito:

#!/bin/bash 
per (( conteggio=10; conteggio>0; conteggio-- ))
fare
echo -n "$conteggio"
fatto

L'output di questo ciclo for dovrebbe essere:

10 9 8 7 6 5 4 3 2 1

Con se affermazioni, possiamo anche definire else if utilizzando elif dichiarazione:

#!/bin/bash 
echo "Inserisci un numero valido"
leggi n
se [$n -eq 101];
poi
echo "Questo è il primo numero"
elif [$n -eq 510];
poi
echo "Questo è il secondo numero"
elif [$n -eq 999];
poi
echo "Questo è il terzo numero"
altro
echo "Nessun numero qui"
fi

Possiamo anche scrivere quello script usando il caso dichiarazione. Nel caso dichiarazioni, ;; rappresenta un'interruzione del caso, quindi se il valore della variabile soddisfa una qualsiasi delle condizioni, salta alla fine dello script:

#!/bin/bash 
echo "Inserisci un numero valido"
leggi n
caso $n dentro
101)
echo "Questo è il primo numero";;
510)
echo "Questo è il secondo numero";;
999)
echo "Questo è il terzo numero";;
*)
echo "Nessun numero qui";;
esac

Come eseguire lo script Bash

Ora che abbiamo scritto uno script bash, impariamo come eseguirlo dal terminale. Esistono tre metodi per farlo:utilizzando bash comando, utilizzando il ./ comando ed eseguendo lo script da una directory diversa.

Utilizzo del comando Bash

Il primo metodo consiste nell'usare bash comando dalla directory appropriata. Ad esempio, potresti avere un function.sh script bash contenente semplici funzioni echo in Test/Bash directory. Devi prima aprire la directory usando questo comando:

Cd Test/Bash

Quindi, esegui il seguente bash comando per eseguire lo script bash:

bash function.sh

Dovresti vedere l'output in questo modo:

Se provi a eseguire lo script senza bash comando, riceverai un comando non trovato messaggio di errore.

Utilizzo del comando ./

Puoi eseguire uno script bash senza bash comando. Tuttavia, devi impostare il file in modo che esegua permesso utilizzando il seguente comando dalla directory appropriata:

chmod +x function.sh

Questo comando modifica i permessi del file in modo che tutti possano eseguire il file. Una volta fatto, esegui lo script bash usando questo comando:

./function.sh

Se non imposti correttamente l'autorizzazione, il terminale stamperà un Autorizzazione negata messaggio di errore:

Come la bash comando, riceverai anche un comando non trovato errore se non utilizzi ./ al tuo comando.

Esegui lo script da una directory diversa

Un'altra alternativa è eseguire lo script da una directory diversa. Dopo aver creato lo script bash, utilizza il pwd comando per trovare la directory corrente. Una volta che conosci il percorso, puoi eseguire lo script da qualsiasi directory. Ad esempio, utilizza il comando seguente per eseguire function.sh dalla home directory:

bash Test/Bash/function.sh

Conclusione

Bash legge i comandi della shell e interagisce con il sistema operativo per eseguirli. Il grande aspetto di bash è che puoi compilare molti comandi e funzioni bash in un unico script eseguibile, aiutandoti a semplificare il tuo flusso di lavoro.

Per creare un file di script bash, è necessario comprendere i vari comandi della shell e la loro sintassi corretta. In questo tutorial, abbiamo trattato sette comandi di base:

  • Commenti
  • Variabili
  • Eco
  • Funzioni
  • Cicli
  • Dichiarazioni condizionali
  • Lettura e scrittura di file

Tuttavia, c'è molto altro da imparare se vuoi essere in grado di utilizzare tutto il potenziale di bash. Esercitati con gli esempi che abbiamo fornito e continua a esplorare bash in modo da poter scrivere script migliori e più efficienti.

Abbiamo coperto i tre modi per eseguire uno script bash. Se hai domande o commenti, lasciali nella sezione sottostante.


Linux
  1. Come scrivere uno script Bash con esempi

  2. Bash For Loop Guida ed esempi

  3. Tutorial sul comando cd di Linux per principianti (8 esempi)

  4. Esempi di Bash For Loop e While Loop

  5. Come scrivere uno script bash o automatizzare il vi aperto e modificare il documento?

Tutorial sui comandi Linux readlink e realpath per principianti (con esempi)

Bash Scripting Tutorial per principianti

Bash Heredoc Tutorial per principianti

Script di shell per principianti - Come scrivere script Bash in Linux

Bash Scripting Part2 – Cicli For e While con esempi

Bash Scripting Introduzione Tutorial con 5 esempi pratici