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.
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
- 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 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:
Creiamo un file vuoto nella cartella ~ / bin:
touch ~/bin/datecp
nano ~/bin/datecp
Andiamo avanti e mettiamo in primo piano i prerequisiti, e un commento su cosa fa questo script.
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.
variable=$(command –options arguments)
E per noi, lo costruiamo in questo modo:
date_formatted=$(date +%m_%d_%y-%H.%M.%S)
Ecco uno script di esempio e il suo output:
Torniamo alla nostra sceneggiatura. Aggiungiamo ora la parte di copia del comando.
cp –iv $1 $2.$date_formatted
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:
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:
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!