Il modo in cui ho imparato qualsiasi linguaggio non è sedersi e leggere un libro su di esso solo per impararlo, ma avere uno scopo in mente:
Voglio automatizzare X.
Io quindi inizio a pensare al problema, e poi uso Internet per capire la sintassi per portarmi da A a B.
Per esempio, anni fa volevo tracciare i tempi di attività del mio sistema, quando ero appena passato da Windows che doveva essere riavviato ogni 48 ore e anche perché ero un grande nerd. Stavo prendendo in giro un amico online con questo, quindi volevo aggiornare il tempo di attività del mio sistema qui a casa, su una pagina web che era ospitata fuori su Internet, su un server in un altro stato.
Come fare?
Beh, prima di tutto, come faccio a creare uno script che funzioni veramente.
#!/bin/bash <- Oh, specifies the script interpreter. LEARNED.
Hm, ancora non funziona…
# chmod +x <- Oh, needs execute bit set. LEARNED.
Ora, come prendere l’uptime? Beh, potrei smontare il comando uptime, ma una delle caratteristiche che volevo era quella di tracciare il mio “record uptime”. Il comando uptime di Linux mostra gli uptime in forma umanamente leggibile:
13:23:54 up 32 days, 4:19
Beh, questo è un po’ difficile da analizzare come maggiore o minore di. Si può fare, ma ci deve essere un modo più semplice. Mi chiedo da dove il programma “uptime” estrae quei dati? Un po’ di ricerca su Google mi introduce al sistema /proc:
/proc/uptime
Come faccio a leggerlo? Ci sono alcuni modi. Il modo che ho usato per abitudine (e probabilmente è il modo sbagliato, dato che il comando cat non è davvero pensato per questo è:)
cat /proc/uptime
Che restituisce:
2780345.41 5546896.19
OK, ora abbiamo dei bei decimali che rendono più facile capire se si tratta di un record di uptime. Ma come faccio a prenderlo in una variabile? Ho letto ancora un po’ online sulle virgolette:
UPTIME=`cat /proc/uptime`
Fico, ora ce l’ho in una variabile. Nota mentale, puoi leggere ogni sorta di cose interessanti nelle variabili in questo modo. Devo ricordarmelo in futuro. IMPARATO. Inoltre, cos’è quella roba /proc? Ooh, ci sono un sacco di belle cose lì dentro, come:
cat /proc/cpuinfo
OK, quindi ora ho questo grande numero decimale. Come faccio a convertirlo in giorni, in modo da avere tempi come “23,8 giorni”? Anche cat /proc/cpuinfo restituisce due numeri. Quali voglio? E come faccio a separarli in modo da avere solo quel numero? Ho letto un po’ di più. Ora ci sono alcuni modi per separare una stringa, ma la prima cosa che incontro è il comando cut. Come posso usarlo con una stringa? Ho letto un articolo su piping e reindirizzamento. Vedo che i due numeri sono separati da uno spazio come delimitatore, quindi:
NUMBERIWANT=`echo ${uptime} | cut -d " " -f 1`
Cool. Devo ricordarmelo. Posso fare cose interessanti con quel tubo. Lo archivio mentalmente, insieme al comando cut, che sarà uno dei più utili strumenti della linea di comando che ho incontrato.
Ora, come trasformarlo in giorni…hm, deludente, bash ha un supporto matematico di merda. Hm, questo articolo parla di bc. Un piccolo esperimento e:
uptime=`echo "scale=2; $uptime/86400" | bc`
Quindi bc è il programma usato per fare i calcoli. Dovrò ricordarmelo. Ho imparato i backquote e la pipe nei passi precedenti, quindi era ovvio come usarli qui.
Ora come faccio a fare l’echo in un file di testo che posso usare come include PHP sul sito web (PHP ha imparato allo stesso modo)?
Ah, reindirizzamento!
echo $uptime > ./uptime.txt
E così via. Se guardo i miei vecchi script (questo incluso), la codifica è inefficiente e non necessariamente come la farei ora. Ma mentre seguo questo processo nel corso degli anni, le mie abilità e il mio set di conoscenze migliorano, e dipingendomi negli angoli con cattive pratiche, imparo come non fare le cose. Le mie metodologie migliorano in modo che gli script siano più manutenibili — non attraverso la seduta in un’aula o la lettura di un libro, ma fregandomi da solo e imparando da ciò.
NOTA: Non sono uno sviluppatore professionista. Scrivo script principalmente per i miei scopi (hobbistici). So che le persone con una formazione informatica possono avere obiezioni a questo metodo di apprendimento, ma finora ha funzionato bene per me. Ed è molto divertente perché piuttosto che essere solo una sorta di esercizio di lettura e memorizzazione, sto ottenendo qualcosa “fuori” mentre vado — script utili.
A proposito — metti questo nei preferiti se non l’hai fatto. È fantastico:
Guida agli script Bash avanzati — la maggior parte di quello che so su bash viene da qui.