The Beginner's Guide to Shell Scripting Le basi
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 riga 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 i giochi nel laboratorio informatico del liceo quando non si potevano aprire cartelle di sistema o creare scorciatoie. I file batch in Windows, sebbene 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 inoltre 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 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. Lo 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 quello che già sai: la riga di comando.
Questo è davvero il potere dello scripting, penso. Puoi programmare con i comandi che conosci già, mentre impari 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 davvero 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 referenziati, 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 utilizzare le opzioni giuste, come -i per il comando rm, in modo che sia necessaria l'interazione. Questo può prevenire alcuni errori brutti. 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 qui gli script, 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:
quale [comando]
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 intendi 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.
- Ogni script dovrebbe essere con "#! / Bin / bash"
- Ogni nuova riga è un nuovo comando
- Le righe di commento iniziano con #
- I comandi sono circondati da ()
L'Hash-Bang Hack
Quando una shell analizza attraverso un file di testo, il modo più diretto per identificare il file come script è creare la prima linea:
#! / Bin / bash
Se usi un'altra shell, sostituisci qui il suo percorso. Le righe di commento iniziano con hashes (#), ma aggiungendo 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 che questa linea punta a.
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 sulla riga successiva. Se il tuo editor di testi lo sta facendo, dovresti disattivare il text-wrapping per essere sicuro. Puoi disattivare il text wrapping in nano bit premendo ALT + L.
Commento spesso con #s
Se si inizia una riga con un #, la linea viene ignorata. Questo lo trasforma in una riga di commento, dove è possibile 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 su 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 è la suddetta Hash-Bang hack, quindi non seguire #s with! 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.
Creiamo un file vuoto nella cartella ~ / bin:
tocca ~ / bin / datecp
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.
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 potrai dire a quella stessa variabile di memorizzare informazioni diverse, e qualsiasi istruzione che si verificherà successivamente utilizzerà le nuove informazioni. È un segnaposto davvero stravagante.
Cosa inseriremo in variabile? Bene, memorizziamo 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:
Puoi vedere che aggiungendo diverse variabili che iniziano con%, puoi cambiare l'output del comando in quello che vuoi. Per ulteriori informazioni, è possibile consultare la pagina del manuale per il comando data.
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:
Ma facciamo qualcosa di diverso. Diamo un nome variabile, come date_formatted a questo comando. La sintassi corretta per questo è la seguente:
variable = $ (comando -options argomenti)
E per noi, lo costruiamo in questo modo:
date_formatted = $ (data +% 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".
Ecco uno script di esempio e il suo 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 usare 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_formattato
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 si trova nella 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 indicherà 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 possa essere eseguito correttamente. Il primo argomento, $ 1, è il file che verrà copiato ed è 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 "date_formatted" di cui sopra. 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?
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 archiviare cose!
Lo scripting di shell è il fulcro del tuo sistema operativo. Non è necessario 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 principianti? Condividi i tuoi pensieri nei commenti! C'è altro in arrivo in questa serie!