9 esempi di script Bash per iniziare su Linux

0
158
fatmawati achmad zaenuri/Shutterstock.com

Se stai iniziando con lo scripting Bash su Linux, acquisisci una solida conoscenza delle basi ti starà bene. Sono il fondamento di una conoscenza più approfondita e di abilità di scripting più elevate.

Ricorda, rendi eseguibili i tuoi script

Affinché la shell esegua uno script, lo script deve avere i permessi del file eseguibile impostati. Senza questo, il tuo script è solo un file di testo. Con esso, è ancora un file di testo, ma la shell sa che contiene istruzioni e cercherà di eseguirle all'avvio dello script.

Lo scopo principale della scrittura degli script è che vengano eseguiti, quindi il primo passo fondamentale è sapere come far sapere a Linux che il tuo script dovrebbe essere considerato eseguibile.

Il comando chmod ci consente di impostare i permessi dei file. Il permesso di esecuzione può essere impostato con il flag +x.

chmod +x script1.sh

Dovrai eseguire questa operazione per ciascuno dei tuoi script. Sostituisci “script1.sh” con il nome del tuo script.

1. Qual è quella strana prima riga?

La prima riga di uno script dice alla shell quale interprete dovrebbe essere chiamato per eseguire quello script. La prima riga deve iniziare con uno shebang, “#!”, noto anche come hashbang. Il “#!” dice alla shell che questa riga contiene il percorso e il nome dell'interprete per cui è stato scritto lo script.

Questo è importante perché se hai scritto uno script da eseguire in Bash, non vuoi che venga interpretato da una shell diversa. È probabile che ci siano incompatibilità. Bash—come la maggior parte delle shell—ha le sue peculiarità di sintassi e funzionalità che altre shell non hanno o avranno implementato in modo diverso.

Quando esegui uno script, la shell corrente apre lo script e determina quale shell o interprete deve essere utilizzato per eseguire quello script. Quindi avvia quella shell e le passa lo script.

#!/bin/bash echo In esecuzione in $SHELL

La prima riga di questo script può essere letta come “Usa l'interprete che si trova in/bin/bash per eseguire questo script.”

L'unica riga nello script scrive il valore contenuto nella variabile ambientale $SHELL sullo schermo del terminale. Ciò conferma che Bash è stato utilizzato per eseguire lo script.

./script1.sh

Come trucco da salotto, possiamo dimostrare che lo script viene passato a qualsiasi interprete selezionato.

#!/bin/cat Tutte le righe di testo vengono passate al comando cat e sono stampato nella finestra del terminale. Ciò include la linea Shebang. script2.sh

Questo script viene lanciato dalla shell corrente e passato al comando cat. Il comando cat “corre” lo script.

Scrivere i tuoi shebang in questo modo presuppone che tu sappia dove si trova la shell o un altro interprete sulla macchina di destinazione. E il 99% delle volte va bene. Ma ad alcune persone piace coprire le proprie scommesse e scrivere i propri shebang in questo modo:

#!/usr/bin/env bash echo In esecuzione in $SHELL script3.sh

Quando lo script viene avviato, la shell cerca la posizione della shell denominata. Se la shell si trova in una posizione non standard, questo tipo di approccio può evitare “interprete errato” errori.

Non ascoltare, sta mentendo!

In Linux, c'è sempre più di un modo per scuoiare un gatto o dimostrare che un autore si sbaglia. Per essere completamente reali, c'è un modo per eseguire script senza shebang e senza renderli eseguibili.

Se avvii la shell che vuoi eseguire lo script e passi lo script come parametro della riga di comando , la shell avvierà ed eseguirà lo script— se è eseguibile o meno. Poiché scegli la shell dalla riga di comando, non c'è bisogno di uno shebang.

Questo è l'intero script:

echo “Sono stato eseguito da” $SHELL < p>Useremo ls per vedere che lo script non è realmente eseguibile e avvieremo Bash con il nome dello script:

ls bash script4.sh

C'è anche un modo per far eseguire uno script dalla shell corrente, non una shell lanciata specificamente per eseguire lo script . Se utilizzi il comando sorgente, che può essere abbreviato in un unico punto “.“, lo script viene eseguito dalla shell corrente.

Quindi, per eseguire uno script senza shebang, senza il permesso del file eseguibile e senza avviare un'altra shell, puoi usare uno di questi comandi:

source script4.sh . script4.sh

Sebbene ciò sia possibile, non è consigliabile come soluzione generale. Ci sono degli svantaggi.

Se uno script non contiene uno shebang, non puoi dire per quale shell è stato scritto. Ricorderai tra un anno? E senza che l'autorizzazione eseguibile sia impostata sullo script, il comando ls non lo identificherà come file eseguibile, né utilizzerà il colore per distinguere lo script dai file di testo normale.

CORRELATI: Righe di comando: perché le persone continuano a preoccuparsene?

2. Stampa di testo

La scrittura di testo sul terminale è un requisito comune. Un po' di feedback visivo fa molto.

Per messaggi semplici, il comando echo sarà sufficiente. Consente una certa formattazione del testo e ti consente anche di lavorare con le variabili.

#!/bin/bash echo Questa è una stringa semplice. echo “Questa è una stringa contenente 'virgolette singole' quindi è racchiusa tra virgolette doppie.” echo “Questo stampa il nome utente:” $USER echo -e “L'opzione -e ci permette di usarendirettive di formattazioneper dividere la stringa.” ./script5.sh

Il comando printf ci offre più flessibilità e una migliore formattazione funzionalità inclusa la conversione del numero.

Questo script stampa lo stesso numero utilizzando tre diverse basi numeriche. La versione esadecimale è anche formattata per la stampa in maiuscolo, con zeri iniziali e una larghezza di tre cifre.

#!/bin/bash printf “Decimale: %d, Octal: %o, Hexadecimal: %03Xn” 32 32 32 ./script6.sh

Nota che a differenza di echo, tu deve dire a printf di iniziare una nuova riga con “n” token.

3. Creazione e utilizzo di variabili

Le variabili ti consentono di memorizzare valori all'interno del tuo programma e di manipolarli e usarli. Puoi creare le tue variabili o utilizzare le variabili di ambiente per i valori di sistema.

#!/bin/bash millennium_text=”Anni dal millennio:” current_time=$( date '+%H:%M:%S' ) todays_date=$( date '+%F' ) year=$( date '+%Y' ) echo “Ora attuale:” $current_time echo “Data di oggi:” $todays_date years_since_Y2K=$(( year – 2000 )) echo $ millennium_text $anni_da_Y2K

Questo script crea una variabile stringa chiamata millennium_text. Contiene una riga di testo.

Quindi crea tre variabili numeriche.

  • La variabile current_time viene inizializzata al momento dell'esecuzione dello script.
  • La variabile todays_date è impostata sulla data in cui viene eseguito lo script.
  • La variabile year contiene l'anno corrente.

Per accedere al valore memorizzato in una variabile , fai precedere il suo nome dal simbolo del dollaro “$.”

./script7.sh

Lo script stampa l'ora e la data, quindi calcola quanti anni sono trascorsi dal millennio , e lo memorizza nella variabile years_since_Y2K.

Infine, stampa la stringa contenuta nella variabile millennium_text e il valore numerico memorizzato negli years_since_Y2K.

RELATED: Come lavorare con le variabili in Bash

4. Gestione dell'input utente

Per consentire a un utente di immettere un valore che verrà utilizzato dallo script, è necessario essere in grado di acquisire l'input da tastiera dell'utente. Il comando di lettura Bash consente a ut di fare proprio questo. Ecco un semplice esempio.

#!/bin/bash echo “Inserisci un numero e premi “Invio”” read user_number1; echo “Inserisci un altro numero e premi “Invio”” leggi user_number2; printf “Hai inserito: %d e %dn” $user_number1 $user_number2 printf “Sommati insieme fanno: %dn” $(( user_number1 + user_number2))

Lo script richiede due numeri. Vengono letti dalla tastiera e memorizzati in due variabili, user_number1 e user_number2 .

Lo script stampa i numeri nella finestra del terminale, li somma e stampa il totale.

./script8. sh

Possiamo combinare i prompt nei comandi di lettura usando -p ( prompt).

#!/bin/bash read -p “Inserisci un numero e premi “Invio” ” user_number1; read -p “Inserisci un altro numero e premi “Invio” ” user_number2; printf “Hai inserito: %d e %dn” $user_number1 $user_number2 printf “Sommati insieme fanno: %dn” $(( user_number1 + user_number2))

Questo rende le cose più ordinate e facili da leggere. Gli script di facile lettura sono anche più facili da eseguire il debug.

./script9.sh

< /p>

Lo script ora si comporta in modo leggermente diverso. L'input dell'utente è sulla stessa riga del prompt.

Per catturare l'input da tastiera senza farlo eco alla finestra del terminale, utilizza l'opzione -s (silenzioso).

#!/bin/bash read -s -p “Inserisci il tuo PIN segreto e premi “Invio” ” PIN_segreto; printf “nShhh … è %dn” $secret_PIN ./script10.sh

< /p>

Il valore di input viene acquisito e archiviato in una variabile denominata secret_PIN , ma non viene riprodotto sullo schermo quando l'utente lo digita. Cosa fare dopo dipende da te.

5. Accettazione dei parametri

A volte è più conveniente accettare l'input dell'utente come parametri della riga di comando piuttosto che avere uno script in attesa di input. Passare valori a uno script è facile. Possono essere referenziati all'interno dello script come se fossero qualsiasi altra variabile.

Il primo parametro diventa variabile $1, il secondo parametro diventa variabile $2 e così via. La variabile $0 contiene sempre il nome dello script e la variabile $# contiene il numero di parametri forniti sulla riga di comando. La variabile $@ è una stringa che contiene tutti i parametri della riga di comando.

#!/bin/bash printf “Questo script è chiamato: %sn” $0 printf “Hai usato %d parametri della riga di comandon” $# # scorre le variabili per param in “$@”; do echo “$param” done echo “Il parametro 2 era:” $2

Questo script usa $0 e $# per stampare alcune informazioni. quindi usa ?@ per scorrere tutti i parametri della riga di comando. Usa $2 per mostrare come accedere a un valore di parametro singolo e particolare.

./script11.sh

Composizione di più parole tra virgolette “”” li combina in un unico parametro.

6. Lettura di dati da file

Saper leggere i dati da un file è una grande abilità da possedere. Possiamo farlo in Bash con un ciclo while.

#!/bin/bash LineCount=0 mentre IFS='' read -r LinefromFile || [[ -n “${Linea daFile}” ]]; do ((LineCount++)) echo “Lettura riga $LineCount: ${LinefromFile}” done < “$1”

Stiamo passando il nome del file che vogliamo che lo script elabori come parametro della riga di comando. Sarà l'unico parametro, quindi all'interno dello script $1 conterrà il nome del file. Stiamo reindirizzando quel file nel ciclo while.

CORRELATICome elaborare un file riga per riga in uno script Bash Linux

Il ciclo while imposta il separatore di campo interno su una stringa vuota, utilizzando l'assegnazione IFS=''. Ciò impedisce al comando di lettura di dividere le righe negli spazi bianchi. Solo il ritorno a capo alla fine di una riga è considerato il vero fine della riga.

La clausola [[ -n “${LinefromFile}” ]] tiene conto della possibilità che l'ultima riga nel file non termina con un ritorno a capo. Anche in caso contrario, l'ultima riga verrà gestita correttamente e trattata come una normale riga conforme a POSIX.

./script12.sh twinkle.txt

7. Utilizzo dei test condizionali

Se vuoi che il tuo script esegua azioni diverse per condizioni diverse, devi eseguire test condizionali. La sintassi del test a doppia parentesi fornisce un —inizialmente—numero schiacciante di opzioni.

#!/bin/bash price=$1 if [[ price -ge 15 ]]; quindi fai eco “Troppo costoso”. altrimenti echo “Compralo!” fi

Bash fornisce un intero set di operatori di confronto che ti consentono di determinare cose come se un file esiste, se puoi leggerlo, se puoi scriverci e se esiste una directory.

Ha anche test numerici per uguale a -qe, maggiore di -gt, minore o uguale a -le e così via, anche se puoi anche usare la nota notazione  == , >= , <= .

./script13. sh 13 ./script13.sh 14 ./script13.sh 15 ./script13.sh 16

8. Il potere dei loop for

Le azioni ripetute più e più volte si ottengono utilizzando i loop. Un ciclo for ti consente di eseguire un ciclo un certo numero di volte. Questo potrebbe dipendere da un numero particolare o fino a quando il ciclo non si è fatto strada attraverso un elenco di elementi.

#!/bin/bash for (( i=0; i<=$1; i++ )) do echo “C-style for loop:” $i done for i in {1..4} do echo “For loop con a range:” $i done for i in “zero” “one” “two” “tre” do echo “For loop con un elenco di parole:” $i done website=”How To Geek” for i in $website do echo “For loop con una raccolta di parole:” $i done

Tutti questi loop sono for loop, ma funzionano con diversi tipi di istruzioni e dati di loop.

./script14.sh 3

Il primo ciclo è un classico ciclo for in stile C. Il contatore del ciclo i viene inizializzato a zero e incrementato ad ogni ciclo del ciclo. Mentre il valore di i è minore o uguale al valore contenuto in $1, il ciclo continuerà a essere eseguito.

Il secondo ciclo funziona attraverso l'intervallo di numeri da 1 a 4. Il terzo ciclo funziona attraverso un elenco di parole Mentre ci sono più parole da elaborare, il ciclo continua a ripetersi.

L'ultimo ciclo funziona attraverso l'elenco di parole in una variabile stringa.

9. Funzioni

Le funzioni ti consentono di incapsulare sezioni di codice in routine con nome che possono essere chiamate da qualsiasi punto all'interno del tuo script.

Supponiamo di volere che il nostro script che legge le righe da un file esegua una sorta di elaborazione su ciascuna riga. Sarebbe conveniente avere quel codice contenuto in una funzione.

#!/bin/bash LineCount=0 function count_words() { printf “%d parole nella riga %dn” $(echo $1 | wc – w) $2 } mentre IFS='' legge -r LinefromFile || [[ -n “${Linea daFile}” ]]; do ((LineCount++)) count_words “$LinefromFile” $LineCount fatto < “$1” count_words “Questo non è nel ciclo” 99

Abbiamo modificato il nostro programma di lettura dei file aggiungendo una funzione chiamata count_words. Viene definito prima di doverlo utilizzare.

La definizione della funzione inizia con la parola funzione. Questo è seguito da un nome univoco per la nostra funzione seguito da parentesi “().” Il corpo della funzione è racchiuso tra parentesi graffe “{}.”

La definizione della funzione non comporta l'esecuzione di alcun codice. Nulla nella funzione viene eseguito finché la funzione non viene chiamata.

La funzione count_words stampa il numero di parole in una riga di testo e il numero di riga. Questi due parametri vengono passati alla funzione proprio come i parametri vengono passati a uno script. Il primo parametro diventa la variabile di funzione $1 e il secondo parametro diventa la variabile di funzione $2 e così via.

Il ciclo while legge ogni riga dal file e la passa alla funzione count_words, insieme al numero di riga . E solo per mostrare che possiamo chiamare la funzione da diversi punti all'interno dello script, la chiamiamo ancora una volta al di fuori del ciclo while.

./script15.sh twinkle.txt

Non temere la curva di apprendimento

La creazione di script è gratificante e utile, ma difficile da approfondire. Una volta che avrai a disposizione alcune tecniche riutilizzabili, sarai in grado di scrivere script utili in modo relativamente semplice. Quindi puoi esaminare funzionalità più avanzate.

Cammina prima di poter correre e prenditi del tempo per goderti il ​​viaggio.

RELAZIONATO: 10 Comandi di base di Linux per principianti

LEGGI SUCCESSIVO

  • › Revisione della scheda di acquisizione NZXT Signal 4K30: filmati di alta qualità senza perdita di dati
  • › Comprare un Mac? Probabilmente tutto ciò di cui hai bisogno è un chip M1 o M2 di base
  • › Quanto lontano può arrivare un'auto elettrica con una sola carica?
  • › “Atari era molto, molto difficile” Nolan Bushnell su Atari, 50 anni dopo
  • › Quanto costa ricaricare una batteria?
  • › I 10 migliori film originali Netflix del 2022