Come creare uno script di shell in Linux
Shell è un'interfaccia del sistema operativo. Accetta comandi dagli utenti e li interpreta nel sistema operativo. Se vuoi eseguire una serie di comandi insieme, puoi farlo creando uno script di shell. Gli script di shell sono molto utili se è necessario eseguire un'attività di routine, ad esempio eseguire un backup. Puoi elencare questi comandi ed eseguirli tutti con un solo script. Vediamo come creare uno script di shell ed eseguirlo su Linux.
Creazione di uno script di shell
Accedi alla tua macchina Linux e apri il terminale, vai alla cartella in cui desideri archiviare lo script della shell. Gli script di shell terminano con l'estensione .sh. Creiamo il nostro primo script di shell. Digitare
touch script.sh
Ora, questo file di script non è eseguibile per impostazione predefinita, dobbiamo fornire l'autorizzazione eseguibile a questo file. Digitare
chmod +x script.sh
Ora aggiungeremo alcuni comandi a questo script di shell. Apri questo script di shell con qualsiasi editor di testo di tua scelta (basato sulla riga di comando o sulla GUI) e aggiungi alcuni comandi. Useremo nano. Digitare
nano script.sh
Aggiungi i seguenti comandi per testare questo script di shell
echo This is my first shell script touch testfile ls echo End of my shell script
Salva le modifiche ed esegui lo script della shell digitando
./script.sh
Screenshot dei passaggi precedenti
Puoi vedere che ha eseguito tutti i comandi specificati.
Commenti nello script di shell
Qualsiasi riga che inizia con # nello script di shell viene trattata come un commento e viene ignorata dalla shell durante l'esecuzione, ad eccezione della riga Shebang, che vedremo più avanti in questo articolo. Vediamo un esempio. Viene creato uno script di shell con il seguente contenuto.
# This is a comment echo Testing comments in shell script
Commenti nello script di Shell
Puoi vedere che il commento viene ignorato.
Variabili nello script di shell
Sì, gli script Shell supportano l'uso delle variabili e non è necessario definire il tipo di una variabile durante la sua dichiarazione. Esistono due tipi di variabili:
- Variabili definite dal sistema
- Variabili definite dall'utente.
Le variabili definite dal sistema, chiamate anche variabili di ambiente, sono generalmente in maiuscolo. È possibile visualizzare tutte le variabili di ambiente correnti utilizzando il comando printenv. Le variabili definite dall'utente vengono impostate dall'utente ed esistono solo durante l'esecuzione dello script. Puoi definire una variabile semplicemente digitandone il nome e assegnando un valore con il segno = e accedere a una variabile aggiungendo un $ prima del nome della variabile. Le variabili sono dimostrate nel seguente script di esempio.
# Accessing an Environment Variable echo $USER # Creating and accessing User defined Variable variable_name='Geeksforgeeks' echo $variable_name
Variabili nello script di shell
Definizione dell'interprete Shell Script
Ci sono molte shell disponibili in Linux, come The Bourne Shell(sh), The Korn Shell(ksh) e GNU Bourne-Again Shell(bash). Gli script scritti per la shell sh sono chiamati script di shell e possono essere interpretati da entrambe le shell ksh e bash. ksh e Bash sono versioni migliorate della shell sh originale e hanno più funzionalità di sh. Bash è generalmente la shell predefinita nella maggior parte delle distribuzioni Linux e gli script scritti appositamente per la shell bash sono chiamati script bash.
Puoi specificare quale shell utilizzerà lo script, anche se lo script viene eseguito da un altro terminale di shell. Per fare ciò, aggiungi #! sopra il file di script, seguito dal percorso assoluto della shell scelta. Per specificare bash come interprete, aggiungi la seguente riga sopra lo script della shell.
#!/bin/bash
Questa linea è chiamata linea Shebang.
Nota: Funzionerà solo se bash è installato sul tuo sistema.
Operatori di confronto
Puoi confrontare due variabili nello scripting di shell. Facciamo questi confronti per prendere decisioni, vedremo come farlo più avanti in questo articolo, ma prima ecco un elenco di alcuni operatori di confronto.
Confronto di numeri interi
| Operatore | Descrizione |
|---|---|
| -eq | è uguale a |
| - È | non è uguale a |
| -gt | è più grande di |
| -ge | è più grande di O uguale a |
| -lt | è meno di |
| -IL | è inferiore o uguale a |
Confronto di stringhe
| Operatore | Descrizione |
|---|---|
| == | è uguale a |
| != | non è uguale a |
| < | è inferiore a, in ordine alfabetico ASCII |
| > | è maggiore di, in ordine alfabetico ASCII |
Aggiungiamo un prima perché è necessario eseguire l'escape quando vengono digitati nel costrutto [ ]. Ora vediamo dove vengono utilizzati.
Dichiarazioni condizionali
Le istruzioni condizionali vengono utilizzate per eseguire un blocco di codice solo quando vengono soddisfatte determinate condizioni. Gli script di shell supportano l'uso di istruzioni condizionali. Utilizziamo operatori di confronto per verificare le condizioni. Vediamo alcune affermazioni condizionali.
Se dichiarazione
Controlla la condizione e, se è condizionata, esegue i comandi.
Sintassi
if [ condition ] then #statements fi
Vediamo un esempio.
#!/bin/sh x=10 y=11 if [ $x -ne $y ] then echo 'Not equal' fi
.if dichiarazione
Istruzione if-else
In un'istruzione if-else è possibile specificare una serie di comandi da eseguire se la condizione non viene soddisfatta.
Sintassi
if [ condition ] then #set of statements if the condition is true else #set of statements if the condition is false fi
Vediamo un esempio
#!/Syntaxbin/sh x=10 y=10 if [ $x -ne $y ] then echo 'Not equal' else echo 'They are equal' fi
.istruzione if-else
Ci sono altre dichiarazioni condizionali, puoi leggere a riguardo Qui .
Nota: Digita uno spazio dopo [ e prima ] mentre specifichi la condizione da verificare altrimenti riceverai un errore.
Loop
Usando i cicli, puoi eseguire una serie di comandi più e più volte, finché non viene soddisfatta una determinata condizione. Vediamo alcuni dei loop.
Mentre il ciclo
Inizia a eseguire i comandi specificati se la condizione è vera e li ripete finché la condizione non diventa falsa.
Sintassi
while [ condition ] do #set of statements done
Vediamo un esempio.
#!/bin/sh x=2 while [ $x -lt 6 ] do echo $x x=`expr $x + 1` done
Mentre il ciclo
Racchiudiamo un'istruzione expr all'interno di ` ` quando la assegniamo a una variabile. Puoi leggere il comando expr qui.
Per ciclo
In un ciclo for, la variabile esegue un'iterazione su un elenco di valori e termina quando non ci sono più valori su cui eseguire l'iterazione.
Sintassi
for var in val1 val2 val3 do #statements done
Vediamo un esempio.
#!/bin/sh for var in 2 4 5 8 do echo $var done
per ciclo
Puoi leggere i loop in dettaglio Qui .
Argomenti posizionali
Gli argomenti posizionali sono gli argomenti o i valori che passiamo allo script di shell durante l'esecuzione dello script. Sono accessibili tramite le variabili $0, $1, $2... $9. Oltre a ciò, vengono referenziati da ${10}, ${11} e così via. $# memorizza il numero degli argomenti passati e $0 memorizza il nome dello script. Vediamo un esempio per capire tutto questo.
#!/bin/sh echo 'No of arguments is $#' echo 'Name of the script is $0' echo 'First argument is $1' echo 'Second argument is $2'
Per passare gli argomenti, basta digitarli nel terminale dopo il nome dello script come mostrato di seguito.
Argomenti posizionali
Memorizzazione dell'output dei comandi
È possibile memorizzare l'output dei comandi all'interno di una variabile in uno script di shell. Ci sono due modi per farlo.
Sintassi
#Syntax 1 var=$(a valid linux command) #Syntax 2 var2=`a valid linux command`
Vediamo un esempio.
#!/bin/sh b=$(pwd) c=`pwd` echo $b echo $c d=$(ls /bin | grep bash) echo $d
Memorizzazione dell'output dei comandi
Codici di uscita dei comandi shell
Ogni volta che un comando termina e restituisce il controllo al processo padre, restituisce codici di uscita compresi tra 0 e 255. Il codice di uscita 0 significa che il comando ha avuto successo e qualsiasi altro codice di uscita significa che il comando non ha avuto successo. È possibile visualizzare il codice di uscita dopo aver eseguito qualsiasi comando accedendo al $? variabile. Vedi l'esempio qui sotto.
codice di uscita del comando shell
Puoi impostare manualmente un codice di uscita per lo script della shell. Questo può essere usato con istruzioni condizionali per comunicare se lo scopo dello script è stato raggiunto o meno.
Esempio
#!/bin/sh read x if [ $x -ne 10 ] then echo failed exit 1 else echo passed exit 0 fi
codice di uscita del comando shell