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:
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:
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à:
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.