Uno degli approcci più classici nello sviluppo software è quello che prende il nome di programmazione procedurale. In buon sostanza di tratta della pratica di suddividere il programma principale in parti più piccole, note con il termine di sottoprogrammi (in inglese subroutine) ma anche procedure o funzioni a seconda dei diversi linguaggi di programmazione. Tutto ciò per facilitare la stesura e la manutenzione del programma stesso. Dopo questa introduzione sui sottoprogrammi dareste per scontato la loro disponibilità nei file batch. Ebbene, sbagliereste, in quanto tale possibilità non è contemplata nei file batch. Tuttavia, una possibilità di emulare tale comportamento è comunque possibile individuarla, innanzitutto nell’utilizzo del comando CALL che consente di richiamare un altro file batch. Supponiamo allora di avere un file batch di esempio che serve solo a produrre un messaggio a video:
@ECHO OFF
REM File saluta.bat
ECHO Salve a tutti
Chiameremo il file, come visibile nel commento precedente, saluta.bat.
Il nostro file principale non dovrà far altro che richiamare, con il comando CALL, il file che funge da sottoprogramma, così come mostrato di seguito.
@ECHO OFF
REM Sottoprogrammi
ECHO Io sono il file principale
CALL saluta.bat
ECHO Sono ancora il file principale
Banalmente, il risultato a video sarà il seguente:
Io sono il file principale
Salve a tutti
Sono ancora il file principale
Intuitivamente, si capisce come il relegare un dato comportamento in un file che funge da sottoprogramma consente di snellire e modularizzare il proprio codice in quanto sarà possibile registrare in un dato file batch un certo blocco di istruzioni da far ripetere anche più volte all’interno del nostro programma principale.
Tuttavia, oltre a quello mostrato, esiste un altro modo per inserire una sorta di sottoprogramma direttamente nel file batch. Tale approccio sfrutta il concetto di etichetta. Una etichetta (label in inglese) è una stringa di testo, da terminarsi con il simbolo dei due punti, che viene posizionata in una riga qualsiasi del file batch e che può così essere considerata un punto di salto per l’esecuzione del comando GOTO. Di seguito subito un esempio:
@ECHO OFF
:ritorno
CLS
TIME /T
GOTO ritorno
Nel codice proposto, potete notare un’etichetta di nome ritorno subito dopo della quale viene invocato il comando CLS seguito da TIME che visualizza la data corrente del sistema e che grazie all’opzione /T non ne chiede l’impostazione. L’ultima istruzione è GOTO ritorno che forza l’esecuzione a riprendere proprio dal punto etichettato come ritorno creando quindi un loop (nome tecnico per indicare un ciclo), in questo caso infinito. Per interrompere l’esecuzione sarà necessario usare la combinazione di tasti CTRL+C. Una particolarità relativa alle etichette è che Il comando GOTO accetta l’etichetta speciale di destinazione :EOF, che trasferisce il controllo alla fine del file batch corrente. Ciò consente di uscire da uno script senza definire un’etichetta specifica. Credo sia inutile sottolineare che il precedente è un programma assolutamente stupido e realizzato al solo scopo di presentare un esempio di facile comprensione relativo al comando GOTO. Tuttavia, abbiamo ora uno strumento in più che ci consente di rendere i nostri script maggiormente interattivi. Per dimostrarlo supponiamo di voler realizzare una piccola utility (ovvero un programma di utilità) che consenta all’utente di selezionare un certo comando informativo sullo stato del sistema. Vi scrivo di seguito il codice che commentiamo subito dopo.
@ECHO OFF
:menu
CLS
ECHO ****************************************************
ECHO * VERIFICA RETE
ECHO *
ECHO * 1. VISUALIZZA IMPOSTAZIONI DI RETE
ECHO * 2. TEST CONNESSIONE RETE LOCALE
ECHO * 3. TEST CONNESSIONE INTERNET
ECHO *
ECHO * Q. Esce e torna al prompt dei comandi
ECHO ****************************************************
SET GW=192.168.1.1
SET /P scelta=SCEGLI:
IF %scelta%==1 GOTO ipconfig
IF %scelta%==2 GOTO gateway
IF %scelta%==3 GOTO internet
IF %scelta%==Q GOTO :EOF
IF %scelta%==q GOTO :EOF
:ipconfig
ECHO Rileviamo le configurazioni delle schede di rete
IPCONFIG /ALL
PAUSE
GOTO menu
:gateway
ECHO Eseguiamo un ping al default gateway
PING %GW%
PAUSE
GOTO menu
:internet
ECHO Test connessione Internet
PING 8.8.8.8
PAUSE
GOTO menu
La prima parte dello script è assolutamente banale. Con una serie di comandi ECHO mostriamo a video un menu con tre classiche possibilità per fare il cosiddetto troubleshooting, ovvero individuazione ed eliminazione di un problema, della nostra connessione di rete. Vi faccio tuttavia notare come abbia posto, in testa allo script, un’etichetta, :menu, che servirà come punto di richiamo per far visualizzare il menu alla fine di ogni comando. Successivamente, al fine di rendere più gestibile lo script, dichiariamo, la seguente variabile di ambiente:
SET GW=192.168.1.1
Tale variabile GW contiene uno dei classici default gateway. Con tale termine si indica l’indirizzo IP che viene utilizzato per uscire dalla nostra rete locale. Di norma esso è l’indirizzo del router ADSL della nostra connessione ad Internet. Nel caso in cui tale IP dovesse risultare diverso da quello impostato per la nostra specifica macchina sarà sufficiente modificarlo di conseguenza. L’istruzione successiva:
SET /P scelta=SCEGLI:
visualizza il messaggio “SCEGLI:” e memorizza la digitazione dell’utente in una variabile dal quasi scontato nome scelta. Tale variabile verrà testata con una serie di IF per individuare la selezione effettuata dall’utente. Ognuna di tali scelte termina nel codice con i comandi:
PAUSE
GOTO menu
che consentono appunto, dopo una pausa di visualizzazione, il ritorno ai comandi ECHO che ripropongo a video il menu con le scelte possibili. Per chi è abituato a smanettare con i comandi di rete, IPCONFIG e PING sono pane quotidiano. Nello specifico, IPCONFIG, che aveva già visto in precedenza, con l’opzione /ALL, visualizza in dettaglio tutte le informazioni sulla configurazione della macchina in uso. Il comando PING, invece, serve per capire se la nostra scheda di rete riesce a comunicare, in gergo tecnico pingare l’indirizzo IP che specifichiamo come argomento del comando in questione. Nel caso dell’etichetta :gateway “pinghiamo” il gateway di default. Se questo dovesse essere diverso da 192.168.1.1 lo potremmo scoprire proprio con il comando IPCONFIG e quindi modificheremmo la variabile di ambiente GW di conseguenza. Nel caso, invece, dell’etichetta :internet effettuiamo il ping con l’IP 8.8.8.8. Tale IP corrisponde ad un server DNS di Google e quindi è sempre attivo su Internet. Ovviamente potremmo utilizzare un IP pubblico qualsiasi che sappiamo essere sempre in linea al fine di verificare la nostra connessione verso l’esterno. Per inciso, un server DNS è una macchina che consente la traduzione, nota come risoluzione, dall’indirizzo IP al nome di dominio del tipo www.exaple.com e viceversa.
Carlo A. Mazzone

Oltre alla soluzione che prevede l’installazione di Cygwin (https://www.cygwin.com/) come ambiente di emulazione per Linux, per i sistemi Windows 10 esiste un’alternativa che prevede l’installazione della shell bash come applicativo nativo di Windows stesso. La bash su Windows fornisce così agli sviluppatori e sistemisti una shell Linux in cui eseguire la maggior parte dei comandi Linux senza dover installare uno specifico emulatore esterno. Il prerequisito fondamentale per l’installazione di tale bash è che il nostro Windows sia una versione a 64-bit Anniversary Update build 14393 o superiore. Per verificare la versione del sistema in uso è sufficiente e l’architettura della CPU della nostra macchina è sufficiente accedere a Impostazioni->Sistema-> Informazioni su.
In un sistema Linux, capita molto spesso di dover eseguire un certo file, un particolare comando oppure una serie di operazioni in uno specifico momento della giornata. Un caso classico è rappresentato da operazioni di backup dei dati da effettuarsi preferibilemente in orario notturno.
“Il potere del comando”, l’ultimo libro di Carlo A. Mazzone, diventa anche cartaceo. Dopo una prima distribuzione in formato eBook, infatti, questa guida alle interfacce testuali viene ora stampata su carta e distribuita sui principali store online.
Può essere interessante in ambito laboratoriale o di sviluppo all’interno di un dato gruppo di lavoro abilitare su di una macchina Linux con web server Apache la possibilità per i singoli account utente di utilizzare una specifica cartella per i propri file html e php.
E’ esigenza diffusa realizzare copie di sicurezza di file personali e/o aziendali su una macchina diversa da quella in cui risiedono i file stessi. In questo micro post vi riporto un semplice script da utilizzarsi su macchine windows verso uno sharing di rete che può essere ospitato tanto su di un server Windows tanto su di una macchina Linux con server Samba.
La presente brevissima guida descrive in estrema sintesi l’installazione e configurazione di un server DHCP su di una macchina Linux Ubuntu. Come dovrebbe essere noto il DHCP, ovvero Dynamic Host Configuration Protocol, è un protocollo di rete utilizzato per configurare in maniera dinamica, potremmo dire “al volo”, le schede di rete al fine di minimizzare gli sforzi necessari per manutenere configurazioni di tipo statico. In soldoni, invece di definire manualmente l’indirizzo IP, la netmask, il gateway di default, DNS, ecc. ecc. necessari per consentire alla specifica macchina di “navigare” in rete, demandiamo il tutto al server DHCP. E’ intuitivo riflettere sull’utilità di tale approccio soprattutto quando i dispositivi in questione sono di tipo mobile.
La prima volta che feci conoscenza con il pacchetto Usermin fu quando ero in cerca di un sistema per consentire agli utenti, gestiti tramite una macchina Linux, di poter cambiare la propria password senza costringerli all’uso della shell testuale tramite un brutale passwd.
Webmin è un utilissimo strumento di amministrazione per server Linux. Esso consente tramite un semplice accesso via web di configurare ed amministrare svariati servizi: apache, dns, dhcp solo per citarne alcuni. Webmin consente inoltre di gestire account e lavorare sul file system del server sul quale è installato. Ma anche questo è un elenco estremamente riduttivo delle sue possibilità. In definitiva in un solo ambiente è possibile avere sotto le proprie dita un intero sistema server.
Qualsiasi programmatore che abbia sviluppato in team con altri sviluppatori si sarà reso conto della necessità di condividere pezzi di codice con gli altri elementi del gruppo e delle difficoltà legate a tale condivisione. Fortunatamente esistono software appositamente progettati per consentire a differenti sviluppatori di lavorare sugli stessi progetti controllando le modifiche apportate ed evitando sovrascritture accidentali degli stessi frammenti di codice.