GNU/Linux >> Linux Esercitazione >  >> Linux

Script Bash(I)

Questo è il primo articolo di una serie incentrata sullo scripting di Gnu Bash. Non è un corso completo sulla programmazione bash, ma alla fine dovresti imparare una o due cose. Voglio dire, cose utili che ti aiuteranno a semplificarti la vita.

La pigrizia è la chiave per avere successo

A volte ho bisogno di eseguire command1, seguito da command2, quindi command3 e infine command4. Dopo un po' devo ripetere quella sequenza di comandi. Ma poiché sono molto intelligente, ho esaminato la cronologia dei comandi con il tasto freccia su, quindi non devo scrivere di nuovo da capo.

Poi, dopo altro tempo, devo rifarlo, e so che dovrò rifarlo più volte in futuro. Ad esempio, ogni giorno avvii il tuo computer, accedi al tuo Linux basato su Debian e controlli gli aggiornamenti dei pacchetti:

# apt-get update
(...)
# apt-get upgrade
(...)
# apt-get dist-upgrade

Invece di digitare quei 52 caratteri ogni volta, potresti inserirli in uno script come questo:

#!/bin/bash
#this is not a Hello world
apt-get update
apt-get upgrade
apt-get dist-upgrade

Puoi salvare questo script come "up.sh" e la mattina dopo aver effettuato l'accesso esegui semplicemente:./up.sh . Proprio così hai salvato 44 sequenze di tasti, stai diventando pigro o cosa?.

No, non lo siamo, se provi a eseguire "così com'è", riceverai un bellissimo Errore di autorizzazione negata . Questo perché non ho mai detto di impostare il permesso di esecuzione:

# chmod +x up.sh

Più tardi ti mostrerò come essere ancora più pigro.

Oltre ai comandi nelle ultime righe, hai notato il carattere numerico (#) sulle prime due righe. La prima riga si chiama shebang e dice al sistema quale interprete usa per eseguire i comandi sullo script.

Il secondo è solo un commento e puoi metterlo ovunque:ciò che c'è dietro quel segno verrà ignorato. Ad esempio:

# this is a comment
command1 # this also is a comment. Should explain what that command do
#command2. # This was command... but as was commented out, bash would ignore it

È importante (almeno per me) aggiungere almeno un paio di commenti per ricordarti cosa fa la sceneggiatura e perché. Inoltre, negli script di grandi dimensioni, per aggiungere commenti per spiegare blocchi, sezioni o parti dello script. I commenti ti aiuteranno quando tornerai al tuo script alcuni mesi, settimane o anche giorni dopo.

Diventare più pigri

Non è necessario digitare ogni volta che accediamo ai nostri sistemi. Possiamo fare in modo che il computer esegua lo script per noi. Puoi aggiungere la riga "./up.sh ” in uno dei seguenti luoghi:

  • .bashrc . Questo eseguirà lo script ogni volta che avvii una shell non di accesso (cioè il terminale incluso sul desktop, come xterm)
  • .bash_profile Questo è per la shell di accesso, ad esempio quando digiti utente e password sulla console o accedi al tuo sistema tramite ssh.
  • .xinitrc come .bashrc ma per sessioni grafiche. Probabilmente stai usando un moderno destkop con i suoi strumenti per avviare automaticamente le applicazioni, usale.
  • una voce nel tuo file crontab, quindi viene eseguito periodicamente.

Variabili

Abbiamo bisogno di "qualcosa" per memorizzare i valori, ad esempio l'input dell'utente, un parametro dalla riga di comando. Questo "qualcosa" è una variabile. A proposito, presumo che tu sappia già cos'è una variabile.

Per dichiarare una variabile, puoi

  • assegna un valore a un nome di variabile. Esempio:x=1
  • immetti all'utente un valore con il comando di lettura:leggi x
  • un parametro dalla riga di comando. Tornerò su questo molto presto
  • Ci sono altri modi per definire una variabile che vedremo in seguito

Per "chiamare" una variabile, digita il simbolo del dollaro seguito dal nome della variabile. Ad esempio se vogliamo stampare sullo schermo il valore della variabile $x:

echo "x value: $x"
echo "Type y vaue:"
read y
echo "You typed: $y"

I parametri della riga di comando sono memorizzati in variabili numerate. Ad esempio, usa il primo argomento, chiama la variabile $1. Per il 2, chiama $ 2. E così via. La variabile $0 memorizza il nome del file di script. Nel mio primo esempio non-ciao-mondo, il valore di $0 è "up.sh".

Array

Le matrici sono definite allo stesso modo, ma con i valori racchiusi tra parentesi tonde. In questo modo:

array=(uno dos tres)

In seguito puoi aggiungere più valori all'array con l'indice racchiuso tra parentesi quadre:

array[3]=cuatro

Puoi "chiamare" un elemento dell'array con parentesi graffe per il nome dell'array e parentesi quadre per la posizione dell'elemento (a partire da 0):

$ echo ${array[0]}
uno

Se non usi la parentesi graffa, bash stamperà un letterale [posizione dell'elemento], ad esempio:

$ echo $array[0]
uno[0]

Puoi chiamare tutto l'array con un @ come indice in questo modo:

$ echo ${array[@]}
uno dos tres cuatro

Infine puoi ottenere il numero di elementi di un array con il segno hash (lo stesso che ho detto prima è per i commenti) in questo modo:

echo ${#array[@]}
4

Ci sono molte altre cose che possiamo fare con gli array e altri tipi di array, come gli array associativi. Ma questo basta per oggi.

Rimani sintonizzato

Finora non ho mostrato nulla di molto "woaaah “. Non c'è nemmeno un singolo screenshot in questo articolo. Ma la mia intenzione verso la fine di questa serie -forse tre o più articoli- è quella di fornire strumenti per fare qualcosa di utile. Non so se diventerai un guru dello scripting bash, ma puoi provare 😉

Nel prossimo tratterò alcune strutture di controllo, pipeline e reindirizzamento. Nel frattempo puoi controllare la manpage di bash, ma almeno per me è un po' confusa


Linux
  1. Bash Dynamic (variabile) Nomi di variabili?

  2. Controlla se esiste una variabile in un elenco in Bash

  3. passando grep in una variabile in bash

  4. Come eliminare la variabile di sola lettura in bash?

  5. bash - corrispondenza senza distinzione tra maiuscole e minuscole della variabile

Bash Scripting – Manipolazione di stringhe

Bash Scripting – Case Statement

Script Bash(II)

Scripting Bash(III)

Come impostare la variabile d'ambiente in Bash

Bash Beginner Series #2:Comprensione delle variabili nello scripting di Bash Shell