The Beginner's Guide to Shell Scripting: The Basics

Sommario:

The Beginner's Guide to Shell Scripting: The Basics
The Beginner's Guide to Shell Scripting: The Basics

Video: The Beginner's Guide to Shell Scripting: The Basics

Video: The Beginner's Guide to Shell Scripting: The Basics
Video: Qual è la miglior app di mappe offline (Google Maps Vs Maps.me) - YouTube 2024, Aprile
Anonim
Il termine "shell scripting" viene spesso menzionato nei forum di Linux, ma molti utenti non hanno familiarità con esso. Imparare questo semplice e potente metodo di programmazione può aiutarti a risparmiare tempo, imparare meglio la linea di comando e bandire le noiose attività di gestione dei file.
Il termine "shell scripting" viene spesso menzionato nei forum di Linux, ma molti utenti non hanno familiarità con esso. Imparare questo semplice e potente metodo di programmazione può aiutarti a risparmiare tempo, imparare meglio la linea di comando e bandire le noiose attività di gestione dei file.

Che cosa è Shell Scripting?

Essere un utente Linux significa giocare con la linea di comando. Piaccia o no, ci sono solo alcune cose che sono fatte molto più facilmente attraverso questa interfaccia che puntando e cliccando. Più usi e impari la riga di comando, più ne vedi il potenziale. Bene, la stessa riga di comando è un programma: la shell. Oggi la maggior parte delle distribuzioni Linux usa Bash, e questo è ciò a cui stai veramente inserendo i comandi.

Ora, alcuni di voi che hanno usato Windows prima di usare Linux potrebbero ricordare i file batch. Questi erano piccoli file di testo che potevi riempire con i comandi da eseguire e Windows li eseguiva a turno. È stato un modo intelligente e pulito per fare alcune cose, come eseguire giochi nel laboratorio informatico del liceo quando non si potevano aprire cartelle di sistema o creare scorciatoie. I file batch in Windows, anche se utili, sono un'imitazione a basso costo degli script di shell.

Gli script di shell ci consentono di programmare i comandi in catene e il sistema li esegue come eventi script, proprio come i file batch. Consentono anche funzioni molto più utili, come la sostituzione di comandi. Puoi invocare un comando, come la data, e usarlo come parte di uno schema di denominazione dei file. È possibile automatizzare i backup e ogni file copiato può avere la data corrente aggiunta alla fine del suo nome. Anche gli script non sono solo invocazioni di comandi. Sono programmi a pieno titolo. Scripting consente di utilizzare le funzioni di programmazione, come "for" loop, if / then / else statements, e così via, direttamente nell'interfaccia del sistema operativo. E non devi imparare un'altra lingua perché stai usando ciò che già sai: la riga di comando.
Gli script di shell ci consentono di programmare i comandi in catene e il sistema li esegue come eventi script, proprio come i file batch. Consentono anche funzioni molto più utili, come la sostituzione di comandi. Puoi invocare un comando, come la data, e usarlo come parte di uno schema di denominazione dei file. È possibile automatizzare i backup e ogni file copiato può avere la data corrente aggiunta alla fine del suo nome. Anche gli script non sono solo invocazioni di comandi. Sono programmi a pieno titolo. Scripting consente di utilizzare le funzioni di programmazione, come "for" loop, if / then / else statements, e così via, direttamente nell'interfaccia del sistema operativo. E non devi imparare un'altra lingua perché stai usando ciò che già sai: la riga di comando.

Questo è davvero il potere dello scripting, penso. Si arriva a programmare con comandi che già conosci, mentre si imparano i punti principali dei principali linguaggi di programmazione. Hai bisogno di fare qualcosa di ripetitivo e noioso? Scriptalo! Hai bisogno di una scorciatoia per un comando veramente contorto? Scriptalo! Vuoi creare un'interfaccia della riga di comando davvero facile da usare per qualcosa? Scriptalo!

Prima di iniziare

Prima di iniziare la nostra serie di script, copriamo alcune informazioni di base. Useremo la shell bash, che la maggior parte delle distribuzioni Linux usa in modo nativo. Bash è disponibile anche per gli utenti Mac OS e Cygwin su Windows. Dal momento che è così universale, dovresti essere in grado di scrivere indipendentemente dalla tua piattaforma. Inoltre, purché esistano tutti i comandi a cui si fa riferimento, gli script possono funzionare su più piattaforme con pochi o nessun tweaking richiesto.

Lo scripting può facilmente utilizzare i privilegi di "amministratore" o "superutente", quindi è meglio testare gli script prima di metterli in funzione. Usa anche il buon senso, ad esempio assicurandoti di avere i backup dei file su cui stai per eseguire uno script. È anche molto importante usare le opzioni giuste, come -i per il comando rm, in modo che sia necessaria l'interazione. Questo può prevenire alcuni brutti errori. Come tale, leggi gli script che scarichi e fai attenzione ai dati che hai, nel caso in cui le cose vadano storte.

Al loro centro, gli script sono solo semplici file di testo. Puoi usare qualsiasi editor di testo per scriverli: gedit, emacs, vim, nano … Questa lista potrebbe continuare. Assicurati di salvarlo come testo normale, non come testo RTF o documento Word. Dal momento che amo la facilità d'uso fornita da nano, la userò.

Script Autorizzazioni e nomi

Gli script vengono eseguiti come i programmi e, per far ciò, devono disporre delle autorizzazioni appropriate. È possibile rendere eseguibile script eseguendo il seguente comando su di esso:

chmod +x ~/somecrazyfolder/script1

Ciò consentirà a chiunque di eseguire quel particolare script. Se vuoi limitare il suo utilizzo solo al tuo utente, puoi usare questo invece:

chmod u+x ~/somecrazyfolder/script1

Per eseguire questo script, è necessario eseguire il cd nella directory corretta e quindi eseguire lo script in questo modo:

cd ~/somecrazyfolder

./script1

Per rendere le cose più convenienti, puoi inserire script in una cartella "bin" nella tua home directory:

~/bin

In molte distribuzioni moderne, questa cartella non viene più creata di default, ma è possibile crearla. Questo di solito è dove sono archiviati i file eseguibili che appartengono al tuo utente e non ad altri utenti. Inserendo gli script qui, puoi semplicemente eseguirli digitandone il nome, proprio come gli altri comandi, invece di doverli spostare e usare il prefisso './'.

Prima di nominare uno script, tuttavia, è necessario il seguente comando per verificare se è installato un programma che utilizza tale nome:

which [command]

Un sacco di persone chiamano i loro primi script "test" e quando cercano di eseguirlo nella riga di comando, non succede nulla. Questo perché è in conflitto con il comando test, che non fa nulla senza argomenti. Accertati sempre che i nomi degli script non siano in conflitto con i comandi, altrimenti potresti trovarti a fare cose che non hai intenzione di fare!

Linee guida per lo scripting

Come ho detto prima, ogni file di script è essenzialmente testo normale.Ciò non significa che puoi scrivere ciò che vuoi, volente o nolente, però. Quando si tenta di eseguire un file di testo, le shell analizzeranno attraverso di essi per capire se sono script o meno e come gestire tutto correttamente. Per questo motivo ci sono alcune linee guida che devi sapere.
Come ho detto prima, ogni file di script è essenzialmente testo normale.Ciò non significa che puoi scrivere ciò che vuoi, volente o nolente, però. Quando si tenta di eseguire un file di testo, le shell analizzeranno attraverso di essi per capire se sono script o meno e come gestire tutto correttamente. Per questo motivo ci sono alcune linee guida che devi sapere.
  1. Ogni script dovrebbe essere con "#! / Bin / bash"
  2. Ogni nuova riga è un nuovo comando
  3. Le righe di commento iniziano con #
  4. I comandi sono circondati da ()

L'Hash-Bang Hack

Quando una shell analizza un file di testo, il modo più diretto per identificare il file come script è creare la prima riga:

#!/bin/bash

Se usi un'altra shell, sostituisci qui il suo percorso. Le righe di commento iniziano con hashes (#), ma aggiungendo il bang (!) E il percorso della shell dopo che è una sorta di hack che ignorerà questa regola dei commenti e imporrà lo script di eseguire con la shell a cui punta questa linea.

Nuova riga = Nuovo comando

Ogni nuova riga deve essere considerata un nuovo comando o un componente di un sistema più grande. Le istruzioni If / then / else, ad esempio, prenderanno il controllo di più righe, ma ogni componente di quel sistema si trova in una nuova riga. Non lasciare che un comando passi alla riga successiva, poiché questo può troncare il comando precedente e darti un errore nella riga successiva. Se il tuo editor di testi lo sta facendo, dovresti disattivare il text-wrapping per essere sicuro. Puoi disattivare il ritorno a capo del testo in nano bit premendo ALT + L.

Commento spesso con #s

Se inizi una riga con un #, la linea viene ignorata. Questo lo trasforma in una riga di commento, in cui puoi ricordare a te stesso l'output del comando precedente o quale sarà il comando successivo. Di nuovo, disattiva il ritorno a capo del testo o interrompi il commento in più righe che iniziano tutte con un hash. Usare molti commenti è una buona pratica da tenere, in quanto consente a te e alle altre persone di modificare i tuoi script più facilmente. L'unica eccezione è il suddetto Hash-Bang hack, quindi non seguire #s con! S.;-)

I comandi sono circondati da parentesi

Nei giorni precedenti, le sostituzioni di comando venivano eseguite con segni di graduazione singoli (`, condivide il tasto ~). Non ci stiamo ancora toccando, ma poiché la maggior parte delle persone esplora ed esplora dopo aver imparato le basi, è probabilmente una buona idea menzionare che dovresti usare le parentesi. Questo è principalmente dovuto al fatto che quando si nidifica - metti i comandi all'interno di altri comandi - le parentesi funzionano meglio.

Il tuo primo script

Iniziamo con un semplice script che consente di copiare file e aggiungere date alla fine del nome file. Chiamiamolo "datecp". Per prima cosa, controlliamo se quel nome è in conflitto con qualcosa:

Puoi vedere che non c'è output del comando which, quindi siamo tutti impostati per usare questo nome.
Puoi vedere che non c'è output del comando which, quindi siamo tutti impostati per usare questo nome.

Creiamo un file vuoto nella cartella ~ / bin:

touch ~/bin/datecp

E, cambiamo ora il permesso, prima di dimenticare:
E, cambiamo ora il permesso, prima di dimenticare:
Iniziamo quindi a costruire il nostro script. Apri quel file nel tuo editor di testo preferito. Come ho detto, mi piace la semplicità del nano.
Iniziamo quindi a costruire il nostro script. Apri quel file nel tuo editor di testo preferito. Come ho detto, mi piace la semplicità del nano.

nano ~/bin/datecp

Andiamo avanti e mettiamo in primo piano i prerequisiti, e un commento su cosa fa questo script.

Quindi, dichiariamo una variabile. Se hai mai preso l'algebra, probabilmente sai che cos'è. Una variabile ci consente di memorizzare informazioni e fare cose con esso. Le variabili possono "espandersi" quando si fa riferimento altrove. Cioè, invece di mostrare il loro nome, visualizzeranno i loro contenuti memorizzati. In seguito puoi dire a quella stessa variabile di memorizzare informazioni diverse, e qualsiasi istruzione che si verifica dopo di ciò userà le nuove informazioni. È un segnaposto davvero stravagante.
Quindi, dichiariamo una variabile. Se hai mai preso l'algebra, probabilmente sai che cos'è. Una variabile ci consente di memorizzare informazioni e fare cose con esso. Le variabili possono "espandersi" quando si fa riferimento altrove. Cioè, invece di mostrare il loro nome, visualizzeranno i loro contenuti memorizzati. In seguito puoi dire a quella stessa variabile di memorizzare informazioni diverse, e qualsiasi istruzione che si verifica dopo di ciò userà le nuove informazioni. È un segnaposto davvero stravagante.

Cosa inseriremo in variabile? Bene, conserviamo la data e l'ora! Per fare ciò, chiameremo il comando date.

Dai uno sguardo allo screenshot qui sotto per come costruire l'output del comando date:

Usiamo l'ultima iterazione del comando date, "data +% m_% d_% y-% H.% M.% S", e usiamola nel nostro script.

Se dovessimo salvare questo script adesso, potremmo eseguirlo e ci darebbe l'output del comando date come ci aspetteremmo:
Se dovessimo salvare questo script adesso, potremmo eseguirlo e ci darebbe l'output del comando date come ci aspetteremmo:
Ma facciamo qualcosa di diverso. Diamo un nome variabile, come date formatted a questo comando. La sintassi corretta per questo è la seguente:
Ma facciamo qualcosa di diverso. Diamo un nome variabile, come date formatted a questo comando. La sintassi corretta per questo è la seguente:

variable=$(command –options arguments)

E per noi, lo costruiamo in questo modo:

date_formatted=$(date +%m_%d_%y-%H.%M.%S)

Questo è ciò che chiamiamo sostituzione di comando. In pratica, diciamo bash che ogni volta che appare la variabile "date formatted", per eseguire il comando all'interno delle parentesi. Quindi, qualsiasi output fornito dai comandi dovrebbe essere visualizzato al posto del nome della variabile, "date formatted".
Questo è ciò che chiamiamo sostituzione di comando. In pratica, diciamo bash che ogni volta che appare la variabile "date formatted", per eseguire il comando all'interno delle parentesi. Quindi, qualsiasi output fornito dai comandi dovrebbe essere visualizzato al posto del nome della variabile, "date formatted".

Ecco uno script di esempio e il suo output:

Image
Image
Notare che ci sono due spazi nell'output. Vengono visualizzati entrambi gli spazi tra le virgolette del comando echo e lo spazio davanti alla variabile. Non utilizzare spazi se non vuoi che vengano visualizzati. Si noti inoltre che senza questa riga "echo" aggiunta, lo script non darebbe assolutamente alcun output.
Notare che ci sono due spazi nell'output. Vengono visualizzati entrambi gli spazi tra le virgolette del comando echo e lo spazio davanti alla variabile. Non utilizzare spazi se non vuoi che vengano visualizzati. Si noti inoltre che senza questa riga "echo" aggiunta, lo script non darebbe assolutamente alcun output.

Torniamo alla nostra sceneggiatura. Aggiungiamo ora la parte di copia del comando.

cp –iv $1 $2.$date_formatted

Questo invocherà il comando copy, con le opzioni -i e -v. Il primo ti chiederà la verifica prima di sovrascrivere un file, e quest'ultimo mostrerà ciò che è inattivo sulla riga di comando.
Questo invocherà il comando copy, con le opzioni -i e -v. Il primo ti chiederà la verifica prima di sovrascrivere un file, e quest'ultimo mostrerà ciò che è inattivo sulla riga di comando.

Successivamente, puoi vedere che ho aggiunto l'opzione "$ 1".Quando si esegue lo scripting, un simbolo di dollaro ($) seguito da un numero indica l'argomento numerato dello script quando è stato richiamato. Ad esempio, nel seguente comando:

cp –iv Trogdor2.mp3 ringtone.mp3

Il primo argomento è "Trogdor2.mp3" e il secondo argomento è "Ringtone.mp3".

Guardando indietro al nostro script, possiamo vedere che stiamo facendo riferimento a due argomenti:

Ciò significa che quando eseguiremo lo script, dovremo fornire due argomenti perché lo script funzioni correttamente. Il primo argomento, $ 1, è il file che verrà copiato e sostituito come il primo argomento del comando Äúcp, Äìiv.Äù.
Ciò significa che quando eseguiremo lo script, dovremo fornire due argomenti perché lo script funzioni correttamente. Il primo argomento, $ 1, è il file che verrà copiato e sostituito come il primo argomento del comando Äúcp, Äìiv.Äù.

Il secondo argomento, $ 2, fungerà da file di output per lo stesso comando. Ma puoi anche vedere che è diverso. Abbiamo aggiunto un periodo e abbiamo fatto riferimento alla variabile "data_formattata" dall'alto. Curioso di sapere cosa fa?

Ecco cosa succede quando viene eseguito lo script:

Puoi vedere che il file di output è elencato come qualsiasi cosa ho inserito per $ 2, seguito da un punto, poi l'output del comando date! Ha senso, giusto?
Puoi vedere che il file di output è elencato come qualsiasi cosa ho inserito per $ 2, seguito da un punto, poi l'output del comando date! Ha senso, giusto?

Ora quando eseguo il comando datecp, questo script verrà eseguito e mi consentirà di copiare qualsiasi file in una nuova posizione e aggiungere automaticamente la data e l'ora alla fine del nome file. Utile per l'archiviazione di materiale!

Lo scripting della shell è il fulcro del tuo sistema operativo. Non devi neanche imparare un nuovo linguaggio di programmazione per farlo accadere. Prova a fare lo scripting con alcuni comandi di base a casa e inizia a pensare a cosa puoi usare per questo.

Sei un copione? Hai qualche consiglio per i neofiti? Condividi i tuoi pensieri nei commenti! C'è di più in questa serie!

Consigliato: