Script Bash: l'inizio

Script Bash: l'inizio
Script Bash Parte 2: Loop
Script Bash, parte 3: opzioni e opzioni della riga di comando
Script Bash Parte 4: input e output
Script Bash, parte 5: segnali, attività in background, gestione degli script
Script Bash, parte 6: funzioni e sviluppo di librerie
Script Bash, parte 7: sed ed elaborazione testi
Script Bash, parte 8: linguaggio di elaborazione dati awk
Script Bash Parte 9: Espressioni regolari
Script Bash Parte 10: Esempi pratici
Script Bash, parte 11: aspettative e automazione delle utilità interattive

Oggi parleremo degli script bash. Questo - script della riga di comando, scritto per la shell bash. Esistono altre shell come zsh, tcsh, ksh, ma ci concentreremo su bash. Questo materiale è destinato a tutti, l'unica condizione è la capacità di lavorare riga di comando Linux.

Script Bash: l'inizio

Gli script da riga di comando sono raccolte degli stessi comandi che possono essere immessi dalla tastiera, raccolti in file e uniti da uno scopo comune. In questo caso, i risultati del lavoro dei team possono avere valore indipendente o servire come dati di input per altri team. Gli script sono un modo efficace per automatizzare le azioni eseguite di frequente.

Script Bash: l'inizio

Quindi, se parliamo di riga di comando, ti permette di eseguire più comandi contemporaneamente inserendoli separati da un punto e virgola:

pwd ; whoami

In effetti, se lo hai provato nel tuo terminale, il tuo primo script bash che coinvolge due comandi è già stato scritto. Funziona così. Prima la squadra pwd visualizza le informazioni sulla directory di lavoro corrente, quindi il comando whoamimostra le informazioni sull'utente con cui hai effettuato l'accesso.

Utilizzando questo approccio, puoi combinare tutti i comandi che desideri su una riga, l'unico limite è il numero massimo di argomenti che possono essere passati al programma. È possibile definire questo limite utilizzando il seguente comando:

getconf ARG_MAX

La riga di comando è un ottimo strumento, ma devi inserirvi i comandi ogni volta che ne hai bisogno. Cosa succederebbe se scrivessimo una serie di comandi in un file e chiamassimo semplicemente quel file per eseguirli? In effetti, il file di cui stiamo parlando si chiama script da riga di comando.

Come funzionano gli script bash

Crea un file vuoto usando il comando touch. La sua prima riga deve indicare quale shell utilizzeremo. Siamo interessati a bash, quindi la prima riga del file sarà:

#!/bin/bash

Altre righe in questo file utilizzano il simbolo cancelletto per indicare commenti che la shell non elabora. Tuttavia, la prima riga è un caso speciale, c'è un cancelletto seguito da un punto esclamativo (questa sequenza si chiama shebang) e il percorso verso bash, indica al sistema per cui lo script è stato creato appositamente bash.

I comandi della shell sono separati da un avanzamento riga, i commenti sono separati da un cancelletto. Ecco come appare:

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

Qui, proprio come nella riga di comando, puoi scrivere i comandi su una riga, separati da punto e virgola. Tuttavia, se si scrivono i comandi su righe diverse, il file risulta più semplice da leggere. In ogni caso, la shell li elaborerà.

Impostazione delle autorizzazioni per i file di script

Salvare il file dandogli un nome myscripte il lavoro di creazione dello script bash è quasi terminato. Adesso non resta che rendere eseguibile questo file altrimenti, se provi ad eseguirlo, riscontrerai un errore Permission denied.

Script Bash: l'inizio
Tentativo di eseguire un file di script con autorizzazioni configurate in modo errato

Rendiamo eseguibile il file:

chmod +x ./myscript

Ora proviamo ad eseguirlo:

./myscript

Dopo aver impostato i permessi tutto funziona come dovrebbe.

Script Bash: l'inizio
Esecuzione dello script bash riuscita

Uscita del messaggio

Per inviare testo alla console Linux, utilizzare il comando echo. Usiamo la conoscenza di questo fatto e modifichiamo il nostro script, aggiungendo spiegazioni ai dati che vengono emessi dai comandi già presenti in esso:

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

Questo è ciò che accade dopo aver eseguito lo script aggiornato.

Script Bash: l'inizio
Emissione di messaggi da uno script

Ora possiamo visualizzare le note esplicative utilizzando il comando echo. Se non sai come modificare un file utilizzando gli strumenti Linux o non hai mai visto il comando prima echo, dare un'occhiata a questo материал.

Utilizzo delle variabili

Le variabili consentono di archiviare informazioni in un file di script, ad esempio i risultati dei comandi, per utilizzarle con altri comandi.

Non c'è niente di sbagliato nell'eseguire singoli comandi senza memorizzarne i risultati, ma questo approccio ha capacità piuttosto limitate.

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

  • variabili ambientali
  • Variabili utente

variabili ambientali

A volte i comandi della shell devono funzionare con alcuni dati di sistema. Ecco un esempio di come visualizzare la directory home dell'utente corrente:

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

Tieni presente che possiamo utilizzare una variabile di sistema $HOME tra virgolette doppie, ciò non impedirà al sistema di riconoscerlo. Questo è ciò che ottieni se esegui lo scenario sopra.

Script Bash: l'inizio
Utilizzo di una variabile di ambiente in uno script

Cosa succede se hai bisogno di visualizzare il simbolo del dollaro sullo schermo? Proviamo questo:

echo "I have $1 in my pocket"

Il sistema rileverà il simbolo del dollaro in una stringa tra virgolette e presumerà che abbiamo fatto riferimento a una variabile. Lo script tenterà di visualizzare il valore di una variabile non definita $1. Non è questo ciò di cui abbiamo bisogno. Cosa fare?

In questa situazione, utilizzare il carattere escape, una barra rovesciata, prima del simbolo del dollaro aiuterà:

echo "I have $1 in my pocket"

Lo script ora restituirà esattamente ciò che è previsto.

Script Bash: l'inizio
Utilizzo di una sequenza di escape per stampare il simbolo del dollaro

Variabili utente

Oltre alle variabili di ambiente, gli script bash consentono di definire e utilizzare le proprie variabili nello script. Tali variabili mantengono un valore finché lo script non completa l'esecuzione.

Come per le variabili di sistema, è possibile accedere alle variabili utente utilizzando il simbolo del dollaro:
TNW-CUS-FMP - codice promozionale per uno sconto del 10% sui nostri servizi, attivabile entro 7 giorni

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

Questo è ciò che accade dopo aver eseguito uno script del genere.

Script Bash: l'inizio
Variabili personalizzate in uno script

Sostituzione dei comandi

Una delle funzionalità più utili degli script bash è la capacità di estrarre informazioni dall'output del comando e assegnarle a variabili, consentendo di utilizzare queste informazioni ovunque nel file di script.

Questo può essere fatto in due modi.

  • Utilizzando l'apice inverso "`"
  • In base alla progettazione $()

Quando si utilizza il primo approccio, fare attenzione a non includere una virgoletta singola al posto dell'apice inverso. Il comando deve essere racchiuso tra due di queste icone:

mydir=`pwd`

Nel secondo approccio, la stessa cosa è scritta in questo modo:

mydir=$(pwd)

E lo script potrebbe risultare simile a questo:

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

Durante il suo funzionamento, l'output del comando pwdverrà salvato in una variabile mydir, il cui contenuto, utilizzando il comando echo, andrà alla console.

Script Bash: l'inizio
Uno script che salva i risultati di un comando in una variabile

Operazioni matematiche

Per eseguire operazioni matematiche in un file di script, puoi utilizzare un costrutto come $((a+b)):

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

Script Bash: l'inizio
Operazioni matematiche in uno script

costrutto di controllo if-then

In alcuni scenari è necessario controllare il flusso di esecuzione dei comandi. Ad esempio, se un determinato valore è maggiore di cinque, è necessario eseguire un'azione, altrimenti un'altra. Questo è applicabile in molte situazioni, e qui la struttura di controllo ci aiuterà if-then. Nella sua forma più semplice assomiglia a questo:

if команда
then
команды
fi

Ecco un esempio funzionante:

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

In questo caso, se il comando viene eseguito pwdverrà completato con successo, nella console verrà visualizzato il testo "funziona".

Usiamo la conoscenza che abbiamo e scriviamo uno script più complesso. Diciamo che dobbiamo trovare un determinato utente in /etc/passwd, e se sei riuscito a trovarlo segnala che esiste.

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

Questo è ciò che accade dopo aver eseguito questo script.

Script Bash: l'inizio
Ricerca utente

Qui abbiamo usato il comando grepper cercare un utente in un file /etc/passwd. Se la squadra grepnon ti è familiare, puoi trovarne la descrizione qui.

In questo esempio, se l'utente viene trovato, lo script visualizzerà un messaggio corrispondente. Cosa succede se l'utente non viene trovato? In questo caso lo script completerà semplicemente l'esecuzione senza dirci nulla. Ci piacerebbe che ci parlasse anche di questo, così miglioreremo il codice.

costrutto di controllo if-then-else

Affinché il programma possa riportare sia i risultati di una ricerca riuscita che quella fallita, utilizzeremo la costruzione if-then-else. Ecco come funziona:

if команда
then
команды
else
команды
fi

Se il primo comando restituisce zero, il che significa che è stato eseguito con successo, la condizione sarà vera e l'esecuzione non proseguirà lungo il ramo else. Altrimenti, se viene restituito qualcosa di diverso da zero, il che indicherebbe un errore o un risultato falso, i comandi successivi else.

Scriviamo il seguente script:

#!/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 in malora else.

Script Bash: l'inizio
Esecuzione di uno script con un costrutto if-then-else

Bene, andiamo avanti e interroghiamoci su condizioni più complesse. Cosa succede se è necessario verificare non una condizione, ma diverse? Ad esempio, se viene trovato l'utente desiderato, dovrebbe essere visualizzato un messaggio, se viene soddisfatta qualche altra condizione, dovrebbe essere visualizzato un altro messaggio e così via. In una situazione del genere, le condizioni nidificate ci aiuteranno. Sembra questo:

if команда1
then
команды
elif команда2
then
команды
fi

Se il primo comando restituisce zero, il che indica la sua corretta esecuzione, verranno eseguiti i comandi nel primo blocco then, altrimenti, se la prima condizione è 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 di questo tipo è possibile, ad esempio, creare un nuovo utente utilizzando il comando useradd, se la ricerca non ha prodotto risultati, oppure fai qualcos'altro di utile.

Confronto di numeri

Negli script è possibile confrontare valori numerici. Di seguito è riportato un elenco dei comandi pertinenti.

n1 -eq n2Restituisce vero se n1 è n2.
n1 -ge n2 Restituisce vero se n1più o uguale n2.
n1 -gt n2Restituisce vero se n1 più n2.
n1 -le n2Restituisce vero se n1inferiore o uguale n2.
n1 -lt n2Restituisce vero se n1 è minore di n2.
n1 -ne n2Restituisce vero se n1non uguale n2.

Ad esempio, proviamo uno degli operatori di confronto. Si noti 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

Questo è ciò che verrà restituito da questo comando.

Script Bash: l'inizio
Confronto di numeri negli script

Valore variabile val1maggiore di 5, il ramo finisce per essere eseguito thenoperatore di confronto e nella console viene visualizzato un messaggio corrispondente.

Confronto di stringhe

Gli script possono anche confrontare valori di stringa. Gli operatori di confronto sembrano abbastanza semplici, ma le operazioni di confronto tra stringhe hanno alcune caratteristiche, che tratteremo di seguito. Ecco l'elenco degli operatori.

str1 = str2 Verifica l'uguaglianza delle stringhe, restituendo true se le stringhe sono identiche.
str1 != str2Restituisce vero se le stringhe non sono identiche.
str1 < str2Restituisce vero se str1meno di str2.
str1 > str2 Restituisce vero se str1più di str2.
-n str1 Restituisce vero se lunghezza str1Sopra lo zero.
-z str1Restituisce vero se lunghezza str1uguale 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

Come risultato dell'esecuzione dello script, otteniamo quanto segue.

Script Bash: l'inizio
Confronto di stringhe negli script

Ecco una caratteristica del confronto tra stringhe che vale la pena menzionare. Vale a dire, gli operatori ">" e "<" devono essere preceduti da una barra rovesciata, altrimenti lo script non funzionerà correttamente, anche se non verrà visualizzato alcun messaggio di errore. Lo script interpreta il segno ">" come un comando di reindirizzamento dell'output.

Ecco come funziona 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 della sceneggiatura.

Script Bash: l'inizio
Confronto di stringhe, avviso fornito

Tieni presente che lo script, sebbene eseguito, emette un avviso:

./myscript: line 5: [: too many arguments

Per sbarazzarci di questo avvertimento, concludiamo $val2 tra virgolette doppie:

#!/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 dovrebbe.

Script Bash: l'inizio
Confronto di stringhe

Un'altra caratteristica degli operatori ">" e "<" è il modo in cui funzionano con i caratteri maiuscoli e minuscoli. Per comprendere questa funzionalità, prepariamo un file di testo con il seguente contenuto:

Likegeeks
likegeeks

Salviamolo dandogli un nome myfile, quindi esegui il seguente comando nel terminale:

sort myfile

Ordinarà le righe dal file in questo modo:

likegeeks
Likegeeks

Squadra sort, per impostazione predefinita, ordina le stringhe in ordine crescente, ovvero la lettera minuscola nel nostro esempio è più piccola di 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 esegui, si scopre che tutto è al contrario: la lettera minuscola ora è più grande di quella maiuscola.

Script Bash: l'inizio
Il comando sort e il confronto delle stringhe in un file di script

Nei comandi di confronto, le lettere maiuscole sono più piccole delle lettere minuscole. Il confronto delle stringhe in questo caso viene eseguito confrontando i codici ASCII dei caratteri, l'ordinamento dipende quindi dai codici dei caratteri.

Squadra sort, a sua volta, utilizza l'ordinamento specificato nelle impostazioni della lingua del sistema.

Controlli sui file

Forse i seguenti comandi vengono utilizzati più spesso negli script bash. Ti consentono di verificare varie condizioni relative ai file. Ecco un elenco di questi comandi.

-d fileControlla se un file esiste ed è una directory.
-e fileControlla se il file esiste.
-f file Controlla se un file esiste ed è un file.
-r fileControlla se il file esiste ed è leggibile.
-s file ПControlla se il file esiste e non è vuoto.
-w fileControlla se il file esiste ed è scrivibile.
-x fileControlla se il file esiste ed è eseguibile.
file1 -nt file2 Controlla se è più recente file1Di file2.
file1 -ot file2Controlla se è più vecchio file1Di file2.
-O file Controlla se il file esiste ed è di proprietà dell'utente corrente.
-G fileControlla se il file esiste e se il suo ID di gruppo corrisponde all'ID di gruppo dell'utente corrente.

Questi comandi, così come molti altri discussi oggi, sono facili da ricordare. I loro nomi, essendo abbreviazioni di varie parole, indicano direttamente i controlli che eseguono.

Proviamo in pratica uno dei comandi:

#!/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, ne visualizzerà il contenuto.

Script Bash: l'inizio
Elencare il contenuto di una directory

Crediamo che tu possa sperimentare tu stesso con i restanti comandi; sono tutti utilizzati secondo lo stesso principio.

Risultati di

Oggi abbiamo parlato di come iniziare a scrivere script bash e abbiamo trattato alcune cose di base. In effetti, l'argomento della programmazione bash è enorme. Questo articolo è una traduzione della prima parte di una vasta serie di 11 materiali. Se vuoi continuare subito, ecco un elenco degli originali di questi materiali. Per comodità riportiamo qui la traduzione che avete appena letto.

  1. Script Bash passo dopo passo - qui stiamo parlando di come iniziare a creare script bash, viene considerato l'uso delle variabili, vengono descritte le strutture condizionali, i calcoli, i confronti di numeri, stringhe e la scoperta di informazioni sui file.
  2. Bash Scripting Parte 2, Bash fantastico - qui vengono rivelate le caratteristiche di lavorare con i cicli for e while.
  3. Bash Scripting Parte 3, Parametri e opzioni — questo materiale è dedicato ai parametri della riga di comando e alle chiavi che possono essere passate agli script, lavorando con i dati immessi dall'utente e che possono essere letti dai file.
  4. Bash Scripting Parte 4, Input e Output - qui stiamo parlando di descrittori di file e di come lavorare con essi, di input, output, flussi di errori e di reindirizzamento dell'output.
  5. Bash Scripting Parte 5, Sigals e Jobs — questo materiale è dedicato ai segnali Linux, alla loro elaborazione negli script e al lancio degli script secondo una pianificazione.
  6. Bash Scripting Parte 6, Funzioni — qui puoi apprendere come creare e utilizzare le funzioni negli script e come sviluppare le librerie.
  7. Bash Scripting Parte 7, Utilizzo di sed — questo articolo è dedicato al lavoro con l'editor di testo in streaming sed.
  8. Bash Scripting Parte 8, Utilizzo di awk — questo materiale è dedicato alla programmazione nel linguaggio di elaborazione dati awk.
  9. Bash Scripting Parte 9, Espressioni regolari - qui puoi leggere informazioni sull'uso delle espressioni regolari negli script bash.
  10. Bash Scripting Parte 10, Esempi pratici — ecco le tecniche per lavorare con i messaggi che possono essere inviati agli utenti, nonché un metodo per il monitoraggio del disco.
  11. Bash Scripting Parte 11, Aspettatevi il comando — questo materiale è dedicato allo strumento Expect, con il quale è possibile automatizzare l'interazione con le utilità interattive. In particolare, stiamo parlando degli script aspettati e della loro interazione con gli script bash e altri programmi.

Crediamo che una delle caratteristiche preziose di questa serie di articoli sia che, partendo dal più semplice, adatto a utenti di qualsiasi livello, porta gradualmente ad argomenti piuttosto seri, dando a tutti la possibilità di avanzare nella creazione di script a riga di comando Linux .

Cari lettori! Chiediamo ai guru della programmazione bash di parlare di come hanno raggiunto l'apice della loro maestria, di condividere i loro segreti e non vediamo l'ora di ricevere impressioni da coloro che hanno appena scritto il loro primo script.

Script Bash: l'inizio

Solo gli utenti registrati possono partecipare al sondaggio. AccediPer favore.

Devo tradurre il resto della serie di articoli?

  • Sì!

  • No, non ce n'è bisogno

1030 utenti hanno votato. 106 utenti si sono astenuti.

Fonte: habr.com

Aggiungi un commento