Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Un'applicazione più completa

Dopo una lunga pausa, riprenderemo i lavori sul nostro sys_info_page programma. La nostra prossima aggiunta aggiungerà diverse opzioni della riga di comando al programma come segue:

File di uscita. Aggiungeremo un'opzione per specificare un nome per un file che contenga l'output del programma. Verrà specificato come -f filetto or --file filetto.

Modalità interattiva. Questa opzione richiederà all'utente un nome file di output e determinerà se il file specificato esiste già. In caso affermativo, all'utente verrà richiesto prima che il file esistente venga sovrascritto. Questa opzione sarà specificata da entrambi -i or --interattivo.

Aiuto. O -h or --Aiuto può essere specificato per far sì che il programma emetta un messaggio informativo sull'utilizzo.

Ecco il codice necessario per implementare l'elaborazione della riga di comando:



utilizzo () {

echo "$NOMEPROG: use: $NOMEPROG [-f file | -i]" return

}

# processa le opzioni della riga di comando interactive=

utilizzo () {

echo "$NOMEPROG: use: $NOMEPROG [-f file | -i]" return

}

# processa le opzioni della riga di comando interactive=


nome file=


mentre [[ -n $1 ]]; fai caso $ 1 in

-f | --file)

spostamento

nomefile=$1

;;

nome file=


mentre [[ -n $1 ]]; fai caso $ 1 in

-f | --file)


-i | --interactive) interattivo=1

;;

-h | --help) uscita dall'utilizzo

;;

*) utilizzo >&2

esci da 1

;;

-i | --interactive) interattivo=1

;;

-h | --help) uscita dall'utilizzo

;;

*) utilizzo >&2

esci da 1

;;


che C

turno fatto

che C

turno fatto


Immagine

Per prima cosa, aggiungiamo una funzione di shell chiamata uso per visualizzare un messaggio quando viene richiamata l'opzione della guida o viene tentata un'opzione sconosciuta.

Successivamente, iniziamo il ciclo di elaborazione. Questo ciclo continua mentre il parametro posizionale

$1 non è vuoto. Alla fine del ciclo, abbiamo un comando shift per far avanzare i parametri posizionali per garantire che il ciclo finisca alla fine.

All'interno del ciclo, abbiamo a Custodie dichiarazione che esamina il parametro posizionale corrente per vedere se corrisponde a una delle scelte supportate. Se viene trovato un parametro supportato, si agisce su di esso. Se viene rilevata una scelta sconosciuta, viene visualizzato il messaggio di utilizzo e lo script termina con un errore.

I -f parametro è gestito in modo interessante. Quando viene rilevato, provoca un ulteriore spostamento verificarsi, che fa avanzare il parametro posizionale $1 all'argomento nome file fornito a -f opzione.

Successivamente aggiungiamo il codice per implementare la modalità interattiva:



# modalità interattiva


if [[ -n $interattivo ]]; quindi mentre è vero; fare

read -p "Inserisci il nome del file di output: " filename if [[ -e $filename ]]; poi

read -p "'$nomefile' esiste. Sovrascrivere? [y/n/q] > " case $REPLY in

Y|y) pausa

# modalità interattiva


if [[ -n $interattivo ]]; quindi mentre è vero; fare

read -p "Inserisci il nome del file di output: " filename if [[ -e $filename ]]; poi

read -p "'$nomefile' esiste. Sovrascrivere? [y/n/q] > " case $REPLY in

Y|y) pausa


;;

Q|q) echo "Programma terminato." Uscita

;;

*) Continua

;;

che C

elif [[ -z $nomefile ]]; poi continua

altro

rompere

fi

fatto

fi

;;

Q|q) echo "Programma terminato." Uscita

;;

*) Continua

;;

che C

elif [[ -z $nomefile ]]; poi continua

altro

rompere

fi

fatto

fi


Se l' interattivo variabile non è vuota, viene avviato un ciclo infinito, che contiene il prompt del nome del file e il successivo codice di gestione dei file esistente. Se il file di output desiderato esiste già, all'utente viene richiesto di sovrascrivere, scegliere un altro nome di file o uscire dal programma. Se l'utente sceglie di sovrascrivere un file esistente, a rompere viene eseguito per terminare il ciclo. Notare come Custodie L'istruzione rileva solo se l'utente sceglie di sovrascrivere o uscire. Qualsiasi altra scelta fa sì che il ciclo continui e richiede nuovamente all'utente.

Per implementare la funzionalità del nome del file di output, dobbiamo prima convertire il codice di scrittura della pagina esistente in una funzione di shell, per ragioni che risulteranno chiare tra un momento:



write_html_page () { cat <<- _EOF_

$TITLE

$TITLE

$TIMESTAMP

$(rapporto_tempo di attività)

$(report_spazio_disco)

$(rapporto_casa_spazio)

_EOF_ ritorno

}


# output pagina html


if [[ -n $nomefile ]]; poi

write_html_page () { cat <<- _EOF_

$TITLE

$TITLE

$TIMESTAMP

$(rapporto_tempo di attività)

$(report_spazio_disco)

$(rapporto_casa_spazio)

_EOF_ ritorno

}


# output pagina html


if [[ -n $nomefile ]]; poi


if touch $nomefile && [[ -f $nomefile ]]; quindi scrivi_pagina_html > $nomefile

altro

echo "$PROGNAME: Impossibile scrivere il file '$filename'" >&2 exit 1

per altro

write_html_pagina

fi

if touch $nomefile && [[ -f $nomefile ]]; quindi scrivi_pagina_html > $nomefile

altro

echo "$PROGNAME: Impossibile scrivere il file '$filename'" >&2 exit 1

per altro

write_html_pagina

fi


Il codice che gestisce la logica del -f l'opzione appare alla fine dell'elenco mostrato sopra. In esso, testiamo l'esistenza di un nome file e, se ne viene trovato uno, viene eseguito un test per vedere se il file è effettivamente scrivibile. Per fare questo, a toccare viene eseguito, seguito da un test per determinare se il file risultante è un file normale. Questi due test si occupano di situazioni in cui viene immesso un percorso non valido (toccare fallirà) e, se il file esiste già, che è un file normale.

Come possiamo vedere, il file write_html_pagina viene chiamata la funzione per eseguire l'effettiva generazione della pagina. Il suo output è diretto allo standard output (se la variabile nome del file è vuoto) o reindirizzato al file specificato.


Il miglior sistema operativo cloud computing su OnWorks: