Bash script: introduzione

Bash script: introduzione
Bash-script, parte 2: cicli
Bash-script, parte 3: parametri e chiavi della riga di comando
Bash-script, parte 4: input e output
Bash-script, parte 5: segnali, processi in background, gestione degli script
Bash-script, parte 6: funzioni e sviluppo di librerie
Bash-script, parte 7: sed e manipolazione dei testi
Bash-script, parte 8: linguaggio di manipolazione dei dati awk
Bash-script, parte 9: espressioni regolari
Bash-script, parte 10: esempi pratici
Bash-script, parte 11: expect e automazione di strumenti interattivi

Oggi parleremo di bash-script. Questo è un insieme di comandi della riga di comando, scritti per la shell bash. Ci sono anche altre shell, come zsh, tcsh, ksh, ma ci concentreremo su bash. Questo materiale è rivolto a tutti gli interessati, l'unico requisito è saper lavorare con la riga di comando Linux.

Bash script: introduzione

Gli script della riga di comando sono set di comandi che possono essere digitati dalla tastiera, raccolti in file e uniti con un obiettivo comune. I risultati dell'esecuzione dei comandi possono avere valore autonomo o servire come input per altri comandi. Gli script sono un modo potente per automatizzare azioni ripetitive.

Bash script: introduzione

Quindi, parlando della riga di comando, essa consente di eseguire più comandi in una sola volta, inserendoli attraverso il punto e virgola:

pwd ; whoami

In effetti, se hai provato questo nel tuo terminale, il tuo primo bash-script, che utilizza due comandi, è già stato scritto. Funziona così. Prima il comando pwd mostra a schermo informazioni sulla directory di lavoro corrente, poi il comando whoamimostra i dati sull'utente con cui sei connesso al sistema.

Utilizzando questo approccio, puoi combinare quanti più comandi vuoi in una sola riga, l'unico limite è il numero massimo di argomenti che possono essere passati al programma. Questo limite può essere determinato con il seguente comando:

getconf ARG_MAX

La riga di comando è uno strumento eccellente, ma i comandi devono essere digitati ogni volta che ne hai bisogno. Cosa succederebbe se registrassi un insieme di comandi in un file e semplicemente richiamassi quel file per eseguirli? Quel file di cui parliamo è chiamato script della riga di comando.

Come sono strutturati i bash-script

Crea un file vuoto usando il comando touch. Nella sua prima riga, è necessario specificare quale shell intendiamo utilizzare. Ci interessa bash, quindi la prima riga del file sarà la seguente:

#!/bin/bash

Nelle altre righe di questo file, il simbolo del cancelletto viene utilizzato per indicare commenti che la shell non elabora. Tuttavia, la prima riga è un caso particolare, qui il cancelletto seguito da un punto esclamativo (questa sequenza è chiamata shebang) e il percorso a bash, indicano al sistema che lo script è stato creato specificamente per bash.

I comandi della shell sono separati da un ritorno a capo, i commenti sono evidenziati dal simbolo del cancelletto. Ecco come appare:

#!/bin/bash
# This is a comment
pwd
whoami

Qui, proprio come nella riga di comando, è possibile scrivere comandi su una sola riga, separandoli con un punto e virgola. Tuttavia, se si scrivono comandi su righe diverse, il file sarà più leggibile. In ogni caso, la shell li elaborerà.

Impostazione delle autorizzazioni per il file dello script

Salva il file con il nome myscript, e il lavoro per creare lo script bash è quasi completato. Ora resta solo da rendere questo file eseguibile, altrimenti, tentando di eseguirlo, si verificherà un errore Permission denied.

Bash script: introduzione
Tentativo di eseguire un file di script con autorizzazioni non configurate correttamente

Rendiamo il file eseguibile:

chmod +x ./myscript

Ora proviamo ad eseguirlo:

./myscript

Dopo aver impostato le autorizzazioni, tutto funziona come previsto.

Bash script: introduzione
Esecuzione riuscita dello script bash

Output dei messaggi

Per stampare testo nella console di Linux, si utilizza il comando echo. Sfruttiamo questa conoscenza e modifichiamo il nostro script, aggiungendo spiegazioni ai dati che le comandi già presenti stampano:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Ecco cosa otterremo dopo aver eseguito lo script aggiornato.

Bash script: introduzione
Output dei messaggi dallo script

Ora possiamo stampare etichette esplicative, utilizzando il comando echo. Se non sai come modificare un file usando gli strumenti di Linux, o non hai mai incontrato il comando echo, dai un'occhiata al questo materiale.

Utilizzo delle variabili

Le variabili consentono di memorizzare informazioni nel file dello script, ad esempio - i risultati delle comandi per essere utilizzati da altri comandi.

Non c'è niente di sbagliato nell'eseguire singole comandi senza memorizzare i risultati del loro funzionamento, ma le possibilità di tale approccio sono piuttosto limitate.

Esistono due tipi di variabili che possono essere utilizzate negli script bash:

  • Variabili ambiente
  • Variabili personalizzate

Variabili ambiente

A volte nei team della shell è necessario lavorare con alcuni dati di sistema. Ecco, ad esempio, come visualizzare la home directory dell'utente corrente:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Fai attenzione al fatto che possiamo usare la variabile di sistema $HOME tra virgolette, questo non impedirà al sistema di riconoscerla. Ecco cosa accadrà se eseguiamo lo script di cui sopra.

Bash script: introduzione
Uso della variabile di ambiente nello script

E se vogliamo visualizzare il simbolo del dollaro? Proviamo in questo modo:

echo "I have $1 in my pocket"

Il sistema riconoscerà il simbolo del dollaro nella stringa racchiusa tra virgolette e deciderà che ci stiamo riferendo a una variabile. Lo script cercherà di visualizzare il valore di una variabile non definita $1. Questo non è ciò di cui abbiamo bisogno. Cosa fare?

In una situazione simile, aiuta utilizzare un carattere di escape, una barra rovesciata, davanti al simbolo del dollaro:

echo "I have $1 in my pocket"

Ora lo script visualizzerà esattamente ciò che ci aspettiamo.

Bash script: introduzione
Uso della sequenza di escape per visualizzare il simbolo del dollaro

Variabili personalizzate

Oltre alle variabili di ambiente, gli script bash consentono di definire e utilizzare le proprie variabili nello script. Queste variabili memorizzano il valore fino al termine dell'esecuzione dello script.

Come nel caso delle variabili di sistema, possiamo accedere alle variabili utente utilizzando il simbolo del dollaro:
TNW-CUS-FMP è il codice promozionale per uno sconto del 10% sui nostri servizi, disponibile per l'attivazione per 7 giorni

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Ecco cosa accadrà dopo l'esecuzione di tale script.

Bash script: introduzione
Variabili utente nello script

Sostituzione dei comandi

Una delle funzionalità più utili degli script bash è la possibilità di estrarre informazioni dall'uscita dei comandi e assegnarle a variabili, il che consente di utilizzare queste informazioni ovunque nel file dello script.

Questo può essere fatto in due modi.

  • Utilizzando il carattere di backtick «`»
  • Utilizzando la sintassi $()

Con il primo approccio, assicurati di non confondere il backtick con un apostrofo. Il comando deve essere racchiuso in due di questi caratteri:

mydir=`pwd`

Con il secondo approccio, si scrive allo stesso modo:

mydir=$(pwd)

E alla fine, lo script potrebbe apparire così:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Durante la sua esecuzione, l'uscita del comando pwdverrà salvata nella variabile mydir, il cui contenuto, tramite il comando echo, apparirà nella console.

Bash script: introduzione
Uno script che salva i risultati dell'esecuzione del comando in una variabile

Operazioni matematiche

Per eseguire operazioni matematiche in un file script, è possibile utilizzare una costruzione del tipo $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Bash script: introduzione
Operazioni matematiche nello script

Costrutto di controllo if-then

In alcuni script è necessario controllare il flusso di esecuzione dei comandi. Ad esempio, se un certo valore è maggiore di cinque, bisogna eseguire un'azione, altrimenti un'altra. Questa logica si applica a molte situazioni, e qui ci aiuterà il costrutto di controllo if-then. Nella sua forma più semplice appare così:

if comando
then
comandi
fi

Ecco un esempio pratico:

#!/bin/bash
if pwd
then
echo "It works"
fi

In questo caso, se l'esecuzione del comando pwdha successo, verrà stampato in console il testo «it works».

Utilizziamo le conoscenze che abbiamo e scriviamo uno script più complesso. Diciamo, dobbiamo trovare un certo utente in /etc/passwd, e se siamo riusciti a trovarlo, comunicargli che esiste.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Ecco cosa otteniamo dopo aver eseguito questo script.

Bash script: introduzione
Ricerca utente

Qui abbiamo utilizzato il comando grepper cercare un utente nel file /etc/passwd. Se il comando grepnon ti è familiare, puoi trovare la sua descrizione qui.

In questo esempio, se l'utente viene trovato, lo script stamperà il messaggio corrispondente. E se non siamo riusciti a trovare l'utente? In tal caso, lo script terminerà semplicemente l'esecuzione senza dirci nulla. Vorremmo che ci informasse anche di questo, quindi miglioreremo il codice.

Costrutto di controllo if-then-else

Affinché il programma possa comunicarci sia i risultati della ricerca riuscita che quelli della sfortunata, utilizzeremo la costruzione if-then-else. Ecco come è strutturata:

if comando
then
comandi
else
comandi
fi

Se il primo comando restituisce zero, il che significa che è stato eseguito con successo, la condizione risulterà vera e l'esecuzione non seguirà il ramo else. Altrimenti, se verrà restituito qualcosa di diverso da zero, che indicherà un fallimento o un risultato falso, verranno eseguiti i comandi posti dopo else.

Scriviamo uno script di questo tipo:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

La sua esecuzione è andata per il ramo else.

Bash script: introduzione
Esecuzione dello script con la costruzione if-then-else

Bene, continuiamo a muoverci avanti e poniamoci la questione di condizioni più complesse. Cosa succede se dobbiamo verificare più di una condizione? Ad esempio, se l'utente desiderato è stato trovato, dobbiamo stampare un messaggio, se un'altra condizione è soddisfatta — un altro messaggio, e così via. In una situazione simile ci aiuteranno le condizioni annidate. Si presenta così:

if comando1
then
comandi
elif comando2
then
comandi
fi

Se il primo comando restituisce zero, il che indica il suo successo, verranno eseguiti i comandi nel primo blocco. allora, altrimenti, se la prima condizione risulta falsa e se il secondo comando restituisce zero, verrà eseguito il secondo blocco di codice.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

In uno script simile, ad esempio, si può creare un nuovo utente con il comando useradd, se la ricerca non ha prodotto risultati, o fare qualcos'altro di utile.

Confronto dei numeri

Negli script è possibile confrontare valori numerici. Ecco un elenco dei comandi corrispondenti.

n1 -eq n2Restituisce un valore vero se n1 è uguale a n2.
n1 -ge n2 Restituisce un valore vero se n1maggiore o uguale a n2.
n1 -gt n2Restituisce un valore vero se n1 maggiore n2.
n1 -le n2Restituisce un valore vero se n1minore o uguale a n2.
n1 -lt n2Restituisce un valore vero se n1 è minore di n2.
n1 -ne n2Restituisce un valore vero se n1non è uguale a n2.

Come esempio, proviamo uno degli operatori di confronto. Nota che l'espressione è racchiusa tra parentesi quadre.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

Ecco cosa stamperà questo comando.

Bash script: introduzione
Confronto dei numeri negli script

Il valore della variabile val1è maggiore di 5, di conseguenza si esegue il ramo alloradell'operatore di confronto e viene stampato il messaggio corrispondente in console.

Confronto delle stringhe

Negli script è possibile confrontare anche i valori delle stringhe. Gli operatori di confronto sono piuttosto semplici, tuttavia ci sono peculiarità nelle operazioni di confronto delle stringhe che tratteremo di seguito. Ecco l'elenco degli operatori.

str1 = str2 Controlla se le stringhe sono uguali, restituisce vero se le stringhe sono identiche.
str1 != str2Restituisce vero se le stringhe non sono identiche.
str1 < str2Restituisce vero se str1è minore di str2.
str1 > str2 Restituisce vero se str1è maggiore di str2.
-n str1 Restituisce vero se la lunghezza str1è maggiore di zero.
-z str1Restituisce vero se la lunghezza str1è uguale a zero.

Ecco un esempio di confronto delle stringhe in uno script:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

Di conseguenza, l'esecuzione dello script restituirà quanto segue.

Bash script: introduzione
Confronto delle stringhe negli script

Una caratteristica del confronto delle stringhe merita di essere menzionata. In particolare, gli operatori «>» e «» come un comando di reindirizzamento dell'output.

Ecco come appare il lavoro con questi operatori nel codice:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Ecco i risultati dell'esecuzione dello script.

Bash script: introduzione
Confronto delle stringhe, avviso emesso

Si prega di notare che lo script, sebbene venga eseguito, genera un avviso:

.\/myscript: riga 5: [: troppi argomenti

Per eliminare questo avviso, racchiudiamo $val2 tra virgolette:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Ora tutto funziona come deve.

Bash script: introduzione
Confronto delle stringhe

Un'altra caratteristica degli operatori «>» e «<» è come funzionano con i caratteri maiuscoli e minuscoli. Per comprendere questa caratteristica, prepariamo un file di testo con il seguente contenuto:

Likegeeks
likegeeks

Salviamolo con il nome myfile, dopodiché eseguiremo il seguente comando nel terminale:

sort myfile

Questo ordinerà le righe del file in questo modo:

likegeeks
Likegeeks

Team sort, per impostazione predefinita, ordina le righe in ordine crescente, il che significa che la lettera minuscola nel nostro esempio è inferiore a quella maiuscola. Ora prepariamo uno script che confronterà le stesse stringhe:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Se lo eseguiamo, constateremo che è esattamente il contrario: la lettera minuscola è ora maggiore di quella maiuscola.

Bash script: introduzione
Il comando sort e il confronto delle stringhe nel file di script

Nei comandi di confronto, le lettere maiuscole sono considerate inferiori a quelle minuscole. Il confronto delle stringhe qui viene eseguito confrontando i codici ASCII dei caratteri, quindi l'ordine di ordinamento dipende dai codici dei caratteri.

Team sort, a sua volta, utilizza l'ordine di ordinamento definito nelle impostazioni della lingua di sistema.

Controlli sui file

Probabilmente, i seguenti comandi vengono utilizzati più frequentemente negli script bash. Permettono di verificare diverse condizioni relative ai file. Ecco un elenco di questi comandi.

-d fileControlla se il file esiste ed è una directory.
-e fileControlla se il file esiste.
-f file Controlla se il file esiste ed è un file regolare.
-r fileControlla se il file esiste ed è accessibile in lettura.
-s file Pcontrolla se il file esiste e non è vuoto.
-w fileControlla se il file esiste ed è accessibile in scrittura.
-x fileControlla se il file esiste ed è eseguibile.
file1 -nt file2 Controlla se è più recente di file1, rispetto a file2.
file1 -ot file2Controlla se è più vecchio di file1, rispetto a file2.
-O file Controlla se il file esiste e se l'utente attuale è il suo proprietario.
-G fileControlla se il file esiste e se il suo identificativo di gruppo corrisponde all'identificativo di gruppo dell'utente attuale.

Questi comandi, come del resto molti altri trattati oggi, non sono difficili da memorizzare. I loro nomi, essendo abbreviazioni di varie parole, indicano chiaramente i controlli che eseguono.

Proviamo uno dei comandi nella pratica:

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Questo script, per una directory esistente, stamperà il suo contenuto.

Bash script: introduzione
Stampa del contenuto della directory

Supponiamo che con gli altri comandi tu possa sperimentare autonomamente, tutti sono applicati secondo lo stesso principio.

Conclusioni

Oggi abbiamo parlato di come iniziare a scrivere script bash e abbiamo esaminato alcune basi. In realtà, il tema della programmazione bash è vasto. Questo articolo è una traduzione della prima parte di una grande serie di 11 materiali. Se desideri subito il seguito - ecco l'elenco degli originali di questi materiali. Per comodità, è incluso anche quello di cui hai appena letto la traduzione.

  1. Bash Script Passo Dopo Passo — qui si tratta di come iniziare a creare script bash, si esamina l'uso delle variabili, si descrivono le strutture condizionali, le operazioni, i confronti tra numeri, stringhe, l'acquisizione di informazioni sui file.
  2. Bash Scripting Parte 2, Bash l'awesome — qui si esplorano le caratteristiche del lavoro con i cicli for e while.
  3. Bash Scripting Parte 3, Parametri & opzioni — questo materiale è dedicato ai parametri della riga di comando e alle chiavi che possono essere passate agli script, al lavoro con i dati inseriti dall'utente e che possono essere letti da file.
  4. Bash Scripting Parte 4, Input & Output — qui si parla dei descrittori di file e del loro utilizzo, dei flussi di input, output, errori, e delle ridirezioni.
  5. Bash Scripting Parte 5, Sighals & Lavori — questo materiale è dedicato ai segnali Linux, alla loro gestione negli script, e all'esecuzione di scenari programmati.
  6. Bash Scripting Parte 6, Funzioni — qui puoi scoprire come creare e utilizzare funzioni negli script, e sviluppare librerie.
  7. Bash Scripting Parte 7, Uso di sed — questo articolo è dedicato al lavoro con l'editor di testo in streaming sed.
  8. Bash Scripting Parte 8, Uso di awk — questo materiale è dedicato alla programmazione nel linguaggio di elaborazione dati awk.
  9. Bash Scripting Parte 9, Espressioni Regolari — qui puoi leggere sull'uso delle espressioni regolari negli script bash.
  10. Bash Scripting Parte 10, Esempi Pratici — qui sono riportati i metodi per lavorare con i messaggi che possono essere inviati agli utenti, nonché la metodologia di monitoraggio del disco.
  11. Bash Scripting Parte 11, Comando Expect — questo materiale è dedicato allo strumento Expect, che consente di automatizzare l'interazione con utilità interattive. In particolare, qui si parla degli script expect e della loro interazione con script bash e altri programmi.

Riteniamo che una delle preziose caratteristiche di questa serie di articoli sia che, partendo dal più semplice, adatto a utenti di qualsiasi livello, conduce gradualmente a temi piuttosto impegnativi, dando a tutti i partecipanti la possibilità di progredire nella creazione di script per la riga di comando di Linux.

Gentili lettori! Chiediamo ai guru della programmazione bash di raccontare come hanno raggiunto le vette della loro maestria, di condividere segreti, mentre aspettiamo le impressioni di coloro che hanno appena scritto il loro primo script.

Bash script: introduzione

Solo gli utenti registrati possono partecipare al sondaggio. Accedi, per favore.

Tradurre le altre parti del ciclo di articoli?

  • Sì!

  • No, non è necessario

Hanno votato 1030 utenti. 106 utenti si sono astenuti.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster