Pagina 1 di 1

Appendice Conversione dei file batch Dos

MessaggioInviato: 30/03/2010, 16:23
da AdmLuke
Un certo numero di programmatori ha imparato lo scripting su PC dove era installato il sistema operativo DOS. Anche il frammentario linguaggio dei file batch di DOS consente di scrivere delle applicazioni e degli script piuttosto potenti, anche se questo richiede un ampio impiego di espedienti e stratagemmi. Talvolta, la necessità spinge a convertire vecchi file batch di DOS in script di shell UNIX. Questa operazione, generalmente, non è difficile, dal momento che gli operatori dei file batch DOS sono in numero inferiore rispetto agli ****** operatori dello scripting di shell.
Tabella L-1. Parole chiave / variabili / operatori dei file batch e loro equivalenti di shell
Operatore di File Batch Corrispondente di scripting di shell Significato
% $ prefisso dei parametri da riga di comando
/ - prefisso per le opzione di un comando
\ / separatore di percorso
== = (uguale a) verifica di confronto di stringhe
!==! != (non uguale a) verifica di confronto di stringhe
| | pipe
@ set +v non visualizza il comando corrente
* * "carattere jolly" per nomi di file
> > redirezione di file (sovrascrittura)
>> >> redirezione di file (accodamento)
< < redirezione dello stdin
%VAR% $VAR variabile d'ambiente
REM # commento
NOT ! nega la verifica successiva
NUL /dev/null "buco nero" dove seppellire l'output dei comandi
ECHO echo visualizzazione (molte più opzioni in Bash)
ECHO. echo visualizza una riga vuota
ECHO OFF set +v non visualizza il/i comando/i successivo/i
FOR %%VAR IN (LISTA) DO for var in [lista]; do ciclo "for"
:ETICHETTA nessuno (non necessario) etichetta
GOTO nessuno (usa una funzione) salta ad un altra parte dello script
PAUSE sleep pausa o intervallo di attesa
CHOICE case o select menu di scelta
IF if condizione if
IF EXIST NOMEFILE if [ -e nomefile ] verifica l'esistenza del file
IF !%N==! if [ -z "$N" ] verifica se il parametro "N" non è presente
CALL source o . (operatore punto) "include" un altro script
COMMAND /C source o . (operatore punto) "include" un altro script (uguale a CALL)
SET export imposta una variabile d'ambiente
SHIFT shift scorrimento a sinistra dell'elenco degli argomenti da riga di comando
SGN -lt o -gt segno (di intero)
ERRORLEVEL $? exit status
CON stdin "console" (stdin)
PRN /dev/lp0 dispositivo di stampa (generico)
LPT1 /dev/lp0 primo dispositivo di stampa
COM1 /dev/ttyS0 prima porta seriale
Ovviamente, i file batch contengono, di solito, comandi DOS. Per una corretta conversione, anche questi devono essere sostituiti con i loro equivalenti UNIX.
Tabella L-2. Comandi DOS e loro equivalenti UNIX
Comando DOS Corrispettivo UNIX Effetto
ASSIGN ln collega file o directory
ATTRIB chmod cambia i permessi del file
CD cd cambia directory
CHDIR cd cambia directory
CLS clear pulisce lo schermo
COMP diff, comm, cmp confronta i file
COPY cp copia i file
Ctl-C Ctl-C interruzione (segnale)
Ctl-Z Ctl-D EOF (end-of-file)
DEL rm cancella il/i file
DELTREE rm -rf cancella ricorsivamente una directory
DIR ls -l elenca una directory
ERASE rm cancella il/i file
EXIT exit esce dal processo corrente
FC comm, cmp confronta i file
FIND grep ricerca le stringhe nei file
MD mkdir crea una directory
MKDIR mkdir crea una directory
MORE more filtro per l'impaginazione del testo del file
MOVE mv spostamento
PATH $PATH percorso degli eseguibili
REN mv rinomina (sposta)
RENAME mv rinomina (sposta)
RD rmdir cancella una directory
RMDIR rmdir cancella una directory
SORT sort ordina il file
TIME date visualizza l'ora di sistema
TYPE cat visualizza il file allo stdout
XCOPY cp copia (estesa) di file

In pratica, tutti gli operatori e i comandi di shell, e UNIX, possiedono molte più opzioni e funzionalità rispetto ai loro equivalenti DOS e dei file batch. Inoltre, molti file batch di DOS si basano su utility ausiliarie, come ask.com, una farraginosa controparte di read.
DOS supporta una serie molto limitata e incompatibile di caratteri jolly per l'espansione dei nomi dei file, riconoscendo solo i caratteri * e ?.
Convertire un file batch di DOS in uno script di shell è, solitamente, semplice ed il risultato, molte volte, è più leggibile dell'originale.
Esempio L-1. VIEWDATA.BAT: file batch DOS
1 REM VIEWDATA
2
3 REM ISPIRATO DA UN ESEMPIO PRESENTE IN "DOS POWERTOOLS"
4 REM DI PAUL SOMERSON
5
6
7 @ECHO OFF
8
9 IF !%1==! GOTO VIEWDATA
10 REM SE NON CI SONO ARGOMENTI DA RIGA DI COMANDO...
11 FIND "%1" C:\BOZO\BOOKLIST.TXT
12 GOTO EXIT0
13 REM VISUALIZZA LA RIGA DELLA STRINGA VERIFICATA, QUINDI ESCE.
14
15 :VIEWDATA
16 TYPE C:\BOZO\BOOKLIST.TXT | MORE
17 REM VISUALIZZA L'INTERO FILE, 1 PAGINA ALLA VOLTA.
18
19 :EXIT0
La conversione dello script rappresenta un miglioramento.
Esempio L-2. viewdata.sh: Script di shell risultante dalla conversione di VIEWDATA.BAT
1 #!/bin/bash
2 # viewdata.sh
3 # Conversione di VIEWDATA.BAT in script di shell.
4
5 FILEDATI=/home/bozo/datafiles/book-collection.data
6 NRARG=1
7
8 # @ECHO OFF In questo caso il comando è inutile.
9
10 if [ $# -lt "$NRARG" ] # IF !%1==! GOTO VIEWDATA
11 then
12 less $FILEDATI # TYPE C:\MYDIR\BOOKLIST.TXT | MORE
13 else
14 grep "$1" $FILEDATI # FIND "%1" C:\MYDIR\BOOKLIST.TXT
15 fi
16
17 exit 0 # :EXIT0
18
19 # Non sono necessari GOTO, etichette, giochi di specchi e imbrogli.
20 # Il risultato della conversione è uno script breve, dolce e pulito,
21 #+ il che non può dirsi dell'originale.
In Shell Scripts on the PC, sul sito di Ted Davis, è presente un'ampia serie di manuali sull'arte, ormai fuori moda, della programmazione di file batch. È immaginabile che alcune delle sue ingegnose tecniche possano aver rilevanza anche per gli script di shell.

Indietro
Partenza
Avanti

Un esempio di file .bashrc Esercizi