Passa ai contenuti principali

Un po' di sintassi di Bash

Di recente ho trovato alcune sintassi della Bash che mi sono tornate utili. Le elenco di seguito.

Trasformare in un array una lista restituita da un comando

Se si cattura in una variabile l'output di un comando che normalmente stamperebbe una lista a video, per esempio il comando "find", non si ottiene un array, bensì una stringa con gli elementi della lista separati da uno spazio. Per far diventare questo output un array di Bash è necessario circondare la "cattura" dell'output con un ulteriore paio di parentesi tonde:

sites=($(find /srv -maxdepth 3 -type f -name "node_server.cfg"))

Lunghezza di un array

Per ottenere tutti gli elementi di un array si utilizza il carattere "@" o "*" al posto dell'indice dell'array:

ports=${PORTLIST[@]}

Se, a questo punto, mettiamo un carattere "#" davanti al nome dell'array otterremo il conteggio degli elementi:

portlistlen=${#PORTLIST[@]}

Sintassi alternativa del ciclo "for"

Il ciclo "for" accetta, oltre alla solita sintassi "for a in ..." anche un'altra sintassi molto simile a quella del C:

for (( i=0; i<$portlistlen; i++ ))
do
   ...
done


Commenti

Post popolari in questo blog

Nuovo sito "Creare programmando" con una sezione per la didattica

Ho organizzato i miei tutorial, fatti con Scratch o altri linguaggi, in un nuovo sito che si chiama "Creare programmando" e che dovrebbe rendere più agevole lo scarico degli stessi. Questo sito contiene anche una sezione dedicata alla didattica tramite il computer in cui voglio raccogliere idee e tutorial che possono trovare applicazione nelle scuole oltre che nei CoderDojo, magari semplicemente perché forniscono degli spunti agli insegnanti sugli argomenti che si possono sviluppare (nel vero senso della parola) tramite il computer. Ho inaugurato la sezione didattica con un nuovo tutorial in Scratch dedicato alle regioni italiane. Cliccate qui per andarlo a vedere.

Un tutorial software per allenarsi all'uso dei sensori hardware

Durante l'ultima sessione di CoderDojo MXP abbiamo proposto ai ragazzi un tutorial che ha lo scopo di impratichirli nei ragionamenti che si rendono necessari quanto ci si trova a dover impostare la traiettoria di una macchinina utilizzando solo un sensore in grado di rilevare il colore della traccia visibile sul pavimento (in scala di grigi). Non avendo (ancora) a disposizione macchinine e sensori "reali" abbiamo iniziato a simulare la situazione disegnando una pista con Scratch utilizzando quattro diversi colori. Il compito dei ragazzi era di riuscire a fare in modo che lo sprite dell'automobilina seguisse la pista senza uscire di strada: le correzioni alla traiettoria avvenivano utilizzando il blocco "sta toccando il colore..." come se ci fosse un sensore in grado di vedere il colore della traccia sotto all'automobile. E se ne sono viste di tutti i colori perché il compito non era facile. Alla fine, per stimolare un po' di competizione tr...

Docker: come impostare un ambiente uniforme per la creazione delle immagini

Creando un po' di immagini in Docker mi sono reso conto che è possibile avere un Dockerfile con una struttura che cambia poco tra un'immagine e l'altra in modo da avere un ambiente di "build" uniforme. Inoltre di solito faccio fare la maggior parte del lavoro a uno script di shell che viene eseguito nel containter invece che al Dockerfile; questo ha qualche vantaggio: si può utilizzare tutta la potenza della shell e si mantiene basso il numero di livelli. Tenete presente che Docker può gestire al massimo 127 livelli usando il devicemapper, mentre con AUFS il massimo scende a circa 42. Struttura del Dockerfile I miei Dockerfile sono divisi in quattro sezioni principali: 1) copia dei file nel container; 2) esecuzione del setup; 3) pubblicazione delle porte; 4) impostazione del comando di start. Copia dei file Come prima cosa si copiano tutti i file necessari nel container. Se i file sono numerosi è meglio chiuderli in un archivio tgz per avere il numer...