40 Esempi di script di shell per Linux semplici ma efficaci

Storicamente, la shell è stata l’interprete nativo della linea di comando per i sistemi Unix-like. Ha dimostrato di essere una delle caratteristiche principali di Unix nel corso degli anni ed è cresciuta in un argomento completamente nuovo. Linux offre una varietà di potenti shell con robuste funzionalità, tra cui Bash, Zsh, Tcsh e Ksh. Una delle caratteristiche più sorprendenti di queste shell è la loro programmabilità. Creare semplici ma efficaci script di shell Linux per affrontare i lavori quotidiani è abbastanza facile. Inoltre, una modesta conoscenza di questo argomento ti renderà un power user di Linux in poco tempo. Rimanete con noi per un’introduzione dettagliata allo scripting di shell Unix.

Esempi di script di shell Linux

La maggior parte degli script di shell fatti su Linux coinvolgono la shell bash. I potenti utenti che hanno specificato le scelte, spesso usano altre shell come Zsh e Ksh. Nei nostri esempi ci atterremo principalmente agli script bash di Linux a causa della loro diffusa popolarità e immensa usabilità. I nostri redattori hanno anche cercato di delineare alcuni esempi di script di shell che hanno a che fare con shell diverse da bash. Troverete una sostanziale quantità di familiarità tra i diversi script di shell.

Script Bash per Linux

Bash alias Bourne Again Shell è l’interprete predefinito della linea di comando nella maggior parte delle distro Linux al giorno d’oggi. È un aggiornamento della precedente shell Bourne che fu introdotta per la prima volta nella versione 7 di Unix. Imparare lo scripting della shell bash vi permetterà di capire altri script di shell molto più velocemente. Quindi, provate voi stessi questi semplici esempi per acquisire un’esperienza di prima mano.

1. Hello World

I programmatori spesso imparano nuovi linguaggi imparando il programma hello world. È un semplice programma che stampa la stringa “Hello World” sullo standard output. Usa un editor come vim o nano per creare il file hello-world.sh e copiarci le linee seguenti.

#!/bin/bashecho "Hello World"

Salva e chiudi il file. Devi rendere questo file eseguibile usando il comando seguente.

$ chmod a+x hello-world.sh

Puoi eseguire questo usando uno dei due comandi seguenti.

$ bash hello-world.sh$ ./hello-world.sh

Stamperà la stringa passata a echo dentro lo script.

2. Usare echo per stampare

Il comando echo è usato per stampare informazioni in bash. È simile alla funzione C ‘printf’ e fornisce molte opzioni comuni, incluse le sequenze di escape e il reindirizzamento.

Copia le linee seguenti in un file chiamato echo.sh e rendilo eseguibile come fatto sopra.

#!/bin/bashecho "Printing text"echo -n "Printing text without newline"echo -e "\nRemoving \t special \t characters\n"

Esegui lo script per vedere cosa fa. L’opzione -e è usata per dire a echo che la stringa passata contiene caratteri speciali e richiede funzionalità estese.

3. Usare i commenti

I commenti sono utili per la documentazione e sono un requisito per codebase di alta qualità. È una pratica comune mettere commenti all’interno dei codici che trattano la logica critica. Per commentare una linea, basta usare il carattere #(hash) prima di essa. Controllate il seguente esempio di script bash.

#!/bin/bash# Adding two values((sum=25+35))#Print the resultecho $sum

Questo script mostrerà il numero 60. Controlla come i commenti sono usati usando # prima di alcune linee. La prima linea è un’eccezione, però. È chiamata shebang e permette al sistema di sapere quale interprete usare quando si esegue questo script.

4. Commenti multilinea

Molte persone usano commenti multilinea per documentare i loro script di shell. Controllate come questo viene fatto nel prossimo script chiamato comment.sh.

#!/bin/bash: 'This script calculatesthe square of 5.'((area=5*5))echo $area

Nota come i commenti multilinea sono posizionati dentro i caratteri :’ e ‘.

5. Il ciclo while

Il costrutto while loop è usato per eseguire alcune istruzioni più volte. Controlla il seguente script chiamato while.sh per una migliore comprensione di questo concetto.

#!/bin/bashi=0while doecho Number: $i((i++))done

Quindi, il ciclo while prende la forma seguente.

while docommands 1commands ndone

Lo spazio che circonda le parentesi quadre è obbligatorio.

6. Il ciclo For

Il ciclo for è un altro costrutto della shell bash ampiamente utilizzato che permette agli utenti di iterare sui codici in modo efficiente. Un semplice esempio è dimostrato qui sotto.

#!/bin/bashfor (( counter=1; counter<=10; counter++ ))doecho -n "$counter "doneprintf "\n"

Salva questo codice in un file chiamato for.sh ed eseguilo usando ./for.sh. Non dimenticate di renderlo eseguibile. Questo programma dovrebbe stampare i numeri da 1 a 10.

7. Ricevere input dall’utente

Il ricevere input dall’utente è fondamentale per implementare l’interazione dell’utente nei vostri script. Il seguente esempio di script di shell dimostrerà come ricevere l’input dell’utente all’interno di un programma di shell.

#!/bin/bashecho -n "Enter Something:"read somethingecho "You Entered: $something"

Quindi, il costrutto read seguito da un nome di variabile, è usato per ottenere l’input dell’utente. L’input è memorizzato all’interno di questa variabile e vi si può accedere usando il segno $.

8. L’istruzione If

Le istruzioni If sono il costrutto condizionale più comune disponibile nello scripting di shell Unix, hanno la forma mostrata qui sotto.

if CONDITION thenSTATEMENTSfi

Le istruzioni vengono eseguite solo se la CONDIZIONE è vera. La parola chiave fi è usata per marcare la fine dell’istruzione if. Un rapido esempio è mostrato qui sotto.

#!/bin/bashecho -n "Enter a number: "read numif ]thenecho "Number is greater than 10."fi

Il programma qui sopra mostrerà l’output solo se il numero fornito in input è maggiore di dieci. Il -gt sta per maggiore di; analogamente -lt per minore di; -le per minore di uguale; e -ge per maggiore di uguale. Gli ] sono richiesti.

9. Più controllo usando If Else

Combinando il costrutto else con if permette un controllo molto migliore sulla logica del tuo script. Un semplice esempio è mostrato qui sotto.

#!/bin/bashread nif ;thenecho "It is a one digit number"elseecho "It is a two digit number"fi

La parte else deve essere messa dopo la parte action di if e prima di fi.

10. Uso dell’operatore AND

L’operatore AND permette al nostro programma di controllare se più condizioni sono soddisfatte contemporaneamente o meno. Tutte le parti separate da un operatore AND devono essere vere. Altrimenti, l’istruzione che contiene l’AND restituirà false. Controlla il seguente esempio di script bash per capire meglio come funziona AND.

#!/bin/bashecho -n "Enter Number:"read numif ]; thenecho "Even Number"elseecho "Odd Number"fi

L’operatore AND è denotato dal segno &&.

11. Utilizzo dell’operatore OR

L’operatore OR è un altro costrutto cruciale che ci permette di implementare una logica di programmazione complessa e robusta nei nostri script. Contrariamente a AND, una dichiarazione composta dall’operatore OR restituisce vero quando uno dei suoi operandi è vero. Restituisce falso solo quando ogni operando separato dall’OR è falso.

#!/bin/bashecho -n "Enter any number:"read nif ]thenecho "You won"elseecho "You lost!"fi

Questo semplice esempio dimostra come funziona l’operatore OR negli script di shell di Linux. Dichiara l’utente vincitore solo quando inserisce il numero 15 o 45. Il segno || rappresenta l’operatore OR.

12. Usare Elif

L’istruzione elif sta per else if e offre un mezzo conveniente per implementare la logica a catena. Scopri come funziona elif valutando il seguente esempio.

#!/bin/bashecho -n "Enter a number: "read numif ]thenecho "Number is greater than 10."elif ]thenecho "Number is equal to 10."elseecho "Number is less than 10."fi

Il programma di cui sopra è autoesplicativo, quindi non lo sezioneremo linea per linea. Cambiate parti dello script come i nomi e i valori delle variabili per verificare come funzionano insieme.

13. Il costrutto switch

Il costrutto switch è un’altra potente caratteristica offerta dagli script bash di Linux. Può essere usato dove sono richieste condizioni annidate, ma non si vogliono usare complesse catene if-else-elif. Date un’occhiata al prossimo esempio.

#!/bin/bashecho -n "Enter a number: "read numcase $num in100)echo "Hundred!!" ;;200)echo "Double Hundred!!" ;;*)echo "Neither 100 nor 200" ;;esac

Le condizioni sono scritte tra le parole chiave case ed esac. Il *) è usato per far corrispondere tutti gli input diversi da 100 e 200.

14. Argomenti della riga di comando

Prendere argomenti direttamente dalla shell di comando può essere utile in molti casi. L’esempio seguente dimostra come farlo in bash.

#!/bin/bashecho "Total arguments : $#"echo "First Argument = "echo "Second Argument = "

Esegui questo script con due parametri aggiuntivi dopo il suo nome. L’ho chiamato test.sh e la procedura di chiamata è descritta di seguito.

$ ./test.sh Hey Howdy

Quindi, $1 è usato per accedere al primo argomento, $2 per il secondo, e così via. Il $# è usato per ottenere il numero totale di argomenti.

15. Ottenere gli argomenti con i nomi

L’esempio seguente mostra come ottenere gli argomenti della riga di comando con i loro nomi.

#!/bin/bashfor arg in "$@"doindex=$(echo $arg | cut -f1 -d=)val=$(echo $arg | cut -f2 -d=)case $index inX) x=$val;;Y) y=$val;;*)esacdone((result=x+y))echo "X+Y=$result"

Nominare questo script test.sh e chiamarlo come mostrato sotto.

$ ./test.sh X=44 Y=100

Dovrebbe restituire X+Y=144. Gli argomenti qui sono memorizzati dentro ‘$@’ e lo script li recupera usando il comando cut di Linux.

16. Concatenazione di stringhe

L’elaborazione delle stringhe è di estrema importanza per una vasta gamma di moderni script bash. Fortunatamente, è molto più comodo in bash e permette un modo molto più preciso e conciso di implementarlo. Vedi l’esempio seguente per un rapido sguardo alla concatenazione di stringhe in bash.

#!/bin/bashstring1="Ubuntu"string2="Pit"string=$string1$string2echo "$string is a great resource for Linux beginners."

Il seguente programma produce la stringa “UbuntuPit è una grande risorsa per i principianti di Linux.” sullo schermo.

17. Affettare le stringhe

Al contrario di molti linguaggi di programmazione, bash non fornisce alcuna funzione incorporata per tagliare porzioni di una stringa. L’esempio seguente dimostra come questo possa essere fatto usando l’espansione dei parametri.

#!/bin/bashStr="Learn Bash Commands from UbuntuPit"subStr=${Str:0:20}echo $subStr

Questo script dovrebbe stampare “Learn Bash Commands” come output. L’espansione dei parametri ha la forma ${VAR_NAME:S:L}. Qui, S denota la posizione iniziale e L indica la lunghezza.

18. Estrarre le sottostringhe usando Cut

Il comando cut di Linux può essere usato dall’interno dei vostri script per ‘tagliare’ una porzione di una stringa, ovvero la sottostringa. Il prossimo esempio mostra come questo può essere fatto.

#!/bin/bashStr="Learn Bash Commands from UbuntuPit"#subStr=${Str:0:20}subStr=$(echo $Str| cut -d ' ' -f 1-3)echo $subStr

Guarda questa guida per capire come funziona il comando Linux Cut.

19. Aggiungere due valori

È abbastanza facile eseguire operazioni aritmetiche all’interno degli script della shell di Linux. L’esempio seguente dimostra come ricevere due numeri come input dall’utente e sommarli.

#!/bin/bashecho -n "Enter first number:"read xecho -n "Enter second number:"read y(( sum=x+y ))echo "The result of addition=$sum"

Come puoi vedere, aggiungere numeri in bash è ragionevolmente semplice.

20. Aggiungere valori multipli

Puoi usare i cicli per ottenere input multipli dall’utente e aggiungerli all’interno del tuo script. I seguenti esempi lo mostrano in azione.

#!/bin/bashsum=0for (( counter=1; counter<5; counter++ ))doecho -n "Enter Your Number:"read n(( sum+=n ))#echo -n "$counter "doneprintf "\n"echo "Result is: $sum"

Tuttavia, omettendo il (( )) si otterrà una concatenazione di stringhe piuttosto che un’aggiunta. Quindi, controllate se ci sono cose come questa nel vostro programma.

21. Funzioni in Bash

Come in ogni dialetto di programmazione, le funzioni giocano un ruolo essenziale negli script della shell di Linux. Permettono agli amministratori di creare blocchi di codice personalizzati per un uso frequente. La dimostrazione che segue illustrerà come funzionano le funzioni negli script bash di Linux.

#!/bin/bashfunction Add(){echo -n "Enter a Number: "read xecho -n "Enter another Number: "read yecho "Adiition is: $(( x+y ))"}Add

Qui abbiamo aggiunto due numeri proprio come prima. Ma qui abbiamo fatto il lavoro usando una funzione chiamata Add. Così ogni volta che avete bisogno di aggiungere di nuovo, potete semplicemente chiamare questa funzione invece di scrivere di nuovo quella sezione.

22. Funzioni con valori di ritorno

Una delle caratteristiche più fantastiche delle funzioni è che permettono il passaggio di dati da una funzione all’altra. È utile in un’ampia varietà di scenari. Guardate il prossimo esempio.

#!/bin/bashfunction Greet() {str="Hello $name, what brings you to UbuntuPit.com?"echo $str}echo "-> what's your name?"read nameval=$(Greet)echo -e "-> $val"

Qui l’output contiene dati ricevuti dalla funzione Greet().

23. Creare directory da script Bash

La capacità di eseguire comandi di sistema usando script di shell permette agli sviluppatori di essere molto più produttivi. Il seguente semplice esempio vi mostrerà come creare una directory dall’interno di uno script di shell.

#!/bin/bashecho -n "Enter directory name ->"read newdircmd="mkdir $newdir"eval $cmd

Se guardate attentamente, questo script chiama semplicemente il vostro comando standard di shell mkdir e gli passa il nome della directory. Questo programma dovrebbe creare una directory nel vostro filesystem. Potete anche passare il comando da eseguire all’interno di backticks(“) come mostrato sotto.

`mkdir $newdir`

24. Creare una directory dopo averne confermato l’esistenza

Il programma precedente non funzionerà se la directory di lavoro corrente contiene già una cartella con lo stesso nome. Il programma sottostante controllerà l’esistenza di qualsiasi cartella chiamata $dir e ne creerà una solo se non ne trova nessuna.

#!/bin/bashecho -n "Enter directory name ->"read dirif thenecho "Directory exists"else`mkdir $dir`echo "Directory created"fi

Scrivi questo programma usando eval per aumentare le tue abilità di scripting bash.

25. Leggere i file

Gli script bash permettono agli utenti di leggere i file in modo molto efficace. L’esempio seguente mostra come leggere un file usando gli script di shell. Crea un file chiamato editors.txt con i seguenti contenuti.

1. Vim 2. Emacs 3. ed 4. nano 5. Code

Questo script mostrerà ognuna delle 5 linee precedenti.

#!/bin/bashfile='editors.txt'while read line; doecho $linedone < $file

26. Eliminazione di file

Il seguente programma dimostrerà come eliminare un file all’interno degli script della shell di Linux. Il programma chiederà prima all’utente di fornire il nome del file come input e lo cancellerà se esiste. Il comando rm di Linux esegue l’eliminazione in questo caso.

#!/bin/bashecho -n "Enter filename ->"read namerm -i $name

Scriviamo editors.txt come nome del file e premiamo y quando ci viene chiesto di confermare. Dovrebbe cancellare il file.

27. Aggiungere ai file

L’esempio di script di shell seguente vi mostrerà come aggiungere dati a un file sul vostro filesystem usando gli script bash. Aggiunge un’ulteriore linea al precedente file editors.txt.

#!/bin/bashecho "Before appending the file"cat editors.txtecho "6. NotePad++" >> editors.txtecho "After appending the file"cat editors.txt

Si dovrebbe notare ormai che stiamo usando comandi di terminale quotidiani direttamente dagli script bash di Linux.

28. Testare l’esistenza di un file

Il prossimo esempio di script di shell mostra come controllare l’esistenza di un file dai programmi bash.

#!/bin/bashfilename=if ; thenecho "File exists"elseecho "File does not exist"fi

Stiamo passando il nome del file come argomento direttamente dalla riga di comando.

29. Inviare e-mail da script Shell

È abbastanza semplice inviare e-mail da script bash. Il seguente semplice esempio dimostrerà un modo per farlo da applicazioni bash.

#!/bin/bashrecipient="[email protected]"subject="Greetings"message="Welcome to UbuntuPit"`mail -s $subject $recipient <<< $message`

Invierà un’email al destinatario contenente l’oggetto e il messaggio indicati.

30. Parsing di data e ora

Il prossimo esempio di script bash vi mostrerà come gestire date e orari usando gli script. Il comando Linux date è usato per ottenere le informazioni necessarie, e il nostro programma fa l’analisi.

#!/bin/bashyear=`date +%Y`month=`date +%m`day=`date +%d`hour=`date +%H`minute=`date +%M`second=`date +%S`echo `date`echo "Current Date is: $day-$month-$year"echo "Current Time is: $hour:$minute:$second"

Esegui questo programma per vedere come funziona. Inoltre, prova ad eseguire il comando date dal tuo terminale.

31. Il comando Sleep

Il comando sleep permette al tuo script di shell di fare una pausa tra le istruzioni. È utile in un certo numero di scenari come l’esecuzione di lavori a livello di sistema. Il prossimo esempio mostra il comando sleep in azione all’interno di uno script di shell.

#!/bin/bashecho "How long to wait?"read timesleep $timeecho "Waited for $time seconds!"

Questo programma mette in pausa l’esecuzione dell’ultima istruzione fino a $time secondi, che è fornito dall’utente in questo caso.

32. Il comando Wait

Il comando wait è usato per mettere in pausa i processi di sistema dagli script bash di Linux. Controlla il seguente esempio per una comprensione dettagliata di come funziona in bash.

#!/bin/bashecho "Testing wait command"sleep 5 &pid=$!kill $pidwait $pidecho $pid was terminated.

Esegui questo programma per verificare come funziona.

33. Visualizzazione dell’ultimo file aggiornato

A volte potreste aver bisogno di trovare l’ultimo file aggiornato per certe operazioni. Il seguente semplice programma ci mostra come farlo in bash usando il comando awk. Elencherà l’ultimo file aggiornato o creato nella directory di lavoro corrente.

#!/bin/bashls -lrt | grep ^- | awk 'END{print $NF}'

Per semplicità, eviteremo di descrivere come funziona awk in questo esempio. Potete semplicemente copiare questo codice per portare a termine il compito.

34. Aggiungere estensioni in batch

L’esempio seguente applicherà un’estensione personalizzata a tutti i file all’interno di una directory. Crea una nuova directory e mettici alcuni file a scopo dimostrativo. La mia cartella ha un totale di cinque file, ognuno chiamato test seguito da (0-4). Ho programmato questo script per aggiungere (.UP) alla fine dei file. Potete aggiungere qualsiasi estensione vogliate.

#!/bin/bashdir=for file in `ls /*`domv $file $file.UPdone

In primo luogo, non provate questo script da qualsiasi directory normale; invece, eseguitelo da una directory di test. Inoltre, dovete fornire il nome della directory dei vostri file come argomento della riga di comando. Usate il punto(.) per la directory di lavoro corrente.

35. Stampa il numero di file o cartelle

Il seguente script bash per Linux trova il numero di file o cartelle presenti in una data directory. Utilizza il comando find di Linux per fare questo. È necessario passare il nome della directory in cui si desidera cercare i file dalla riga di comando.

#!/bin/bashif ; thenecho "Files found: $(find "$@" -type f | wc -l)"echo "Folders found: $(find "$@" -type d | wc -l)"elseecho " Please retry with another folder."exit 1fi

Il programma chiederà all’utente di riprovare se la directory specificata non è disponibile o ha problemi di autorizzazione.

36. Pulizia dei file di log

Il prossimo semplice esempio dimostra un modo pratico in cui possiamo usare gli script di shell nella vita reale. Questo programma semplicemente cancellerà tutti i file di log presenti nella vostra directory /var/log. Puoi cambiare la variabile che contiene questa directory per pulire altri log.

#!/bin/bashLOG_DIR=/var/logcd $LOG_DIRcat /dev/null > messagescat /dev/null > wtmpecho "Logs cleaned up."

Ricorda di eseguire questo script di shell Linux come root.

37. Script di backup usando Bash

Gli script di shell forniscono un modo robusto per eseguire il backup dei file e delle directory. Il seguente esempio farà il backup di ogni file o directory che sono stati modificati nelle ultime 24 ore. Questo programma utilizza il comando find per farlo.

#!/bin/bashBACKUPFILE=backup-$(date +%m-%d-%Y)archive=${1:-$BACKUPFILE}find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$archive.tar"echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."exit 0

Stampa i nomi dei file e delle directory dopo che il processo di backup ha avuto successo.

38. Controllare se sei root

L’esempio seguente dimostra un modo rapido per scoprire se un utente è root o no dagli script bash di Linux.

#!/bin/bashROOT_UID=0if thenecho "You are root."elseecho "You are not root"fiexit 0

L’output di questo script dipende dall’utente che lo esegue. Corrisponderà all’utente root in base all’$UID.

39. Rimuovere le linee duplicate dai file

L’elaborazione dei file richiede un tempo considerevole e ostacola la produttività degli amministratori in molti modi. Cercare i duplicati nei vostri file può diventare un compito scoraggiante. Fortunatamente, è possibile farlo con un breve script di shell.

#! /bin/shecho -n "Enter Filename-> "read filenameif ; thensort $filename | uniq | tee sorted.txtelseecho "No $filename in $pwd...try again"fiexit 0

Lo script di cui sopra passa linea per linea attraverso il vostro file e rimuove qualsiasi linea duplicata. Poi mette il nuovo contenuto in un nuovo file e mantiene intatto il file originale.

40. Manutenzione del sistema

Io uso spesso un piccolo script di shell Linux per aggiornare il mio sistema invece di farlo manualmente. Il seguente semplice script di shell ti mostrerà come farlo.

#!/bin/bashecho -e "\n$(date "+%d-%m-%Y --- %T") --- Starting work\n"apt-get updateapt-get -y upgradeapt-get -y autoremoveapt-get autocleanecho -e "\n$(date "+%T") \t Script Terminated"

Lo script si occupa anche dei vecchi pacchetti che non sono più necessari. È necessario eseguire questo script usando sudo, altrimenti non funzionerà correttamente.

Pensieri finali

Gli script di shell Linux possono essere i più diversi che si possano immaginare. Non c’è letteralmente nessun limite quando si tratta di determinare cosa può fare o non può fare. Se sei un nuovo appassionato di Linux, ti consigliamo vivamente di padroneggiare questi esempi fondamentali di script bash. Dovreste modificarli per capire come funzionano più chiaramente. Abbiamo fatto del nostro meglio per fornirvi tutte le intuizioni essenziali necessarie per i moderni script bash di Linux. Non abbiamo toccato alcune questioni tecniche per motivi di semplicità. Tuttavia, questa guida dovrebbe rivelarsi un ottimo punto di partenza per molti di voi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.