Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Qui Documenti

Abbiamo esaminato due metodi diversi per l'output del nostro testo, entrambi utilizzando il eco com


mand. C'è una terza via chiamata a qui documento or qui lo scriptUn here document è un'ulteriore forma di reindirizzamento I/O in cui incorporiamo un corpo di testo nel nostro script e lo immettiamo nell'input standard di un comando. Funziona così:

command << token

testo

token

where command è il nome del comando che accetta input standard e token è una stringa utilizzata per indicare la fine del testo incorporato. Modificheremo il nostro script per utilizzare un documento here:



#! / Bin / bash


# Programma per generare una pagina di informazioni di sistema


TITLE="Rapporto sulle informazioni di sistema per $HOSTNAME" CURRENT_TIME=$(date +"%x %r %Z")

TIMESTAMP="Generato $CURRENT_TIME, da $USER"


gatto << _EOF_

$TITLE

$TITLE

$TIMESTAMP

_EOF_

#! / Bin / bash


# Programma per generare una pagina di informazioni di sistema


TITLE="Rapporto sulle informazioni di sistema per $HOSTNAME" CURRENT_TIME=$(date +"%x %r %Z")

TIMESTAMP="Generato $CURRENT_TIME, da $USER"


gatto << _EOF_

$TITLE

$TITLE

$TIMESTAMP

_EOF_


Invece di usare eco, il nostro script ora utilizza gatto e un documento here. La stringa _EOF_ (che significa "Fine del file", una convenzione comune) è stato selezionato come token e indica la fine del testo incorporato. Si noti che il token deve apparire da solo e che non devono esserci spazi finali sulla riga.

Quindi qual è il vantaggio di usare un documento here? È più o meno lo stesso di eco, tranne per il fatto che, per impostazione predefinita, le virgolette singole e doppie all'interno dei documenti here perdono il loro significato speciale per la shell. Ecco un esempio di riga di comando:



[io@linuxbox~]$ foo="del testo"

[io@linuxbox~]$ gatto << _EOF_

> $ foo

[io@linuxbox~]$ foo="del testo"

[io@linuxbox~]$ gatto << _EOF_

> $ foo


> "$foo"

> '$foo'

> \$foo

> _EOF_ un po' di testo "un po' di testo" 'un po' di testo'

$ foo

> "$foo"

> '$foo'

> \$foo

> _EOF_ un po' di testo "un po' di testo" 'un po' di testo'

$ foo


Come possiamo vedere, la shell non presta attenzione alle virgolette. Le tratta come caratteri normali. Questo ci permette di incorporare liberamente le virgolette in un here document. Questo potrebbe rivelarsi utile per il nostro programma di reportistica.

I documenti here possono essere utilizzati con qualsiasi comando che accetti input standard. In questo esempio, utilizziamo un documento here per passare una serie di comandi al FTP programma per recuperare un file da un server FTP remoto:



#! / Bin / bash

# Script per recuperare un file tramite FTP FTP_SERVER=ftp.nl.debian.org

FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz


ftp -n << _EOF_ apri $FTP_SERVER

utente anonimo me@linuxbox cd $FTP_PATH

hash

ricevi $REMOTE_FILE ciao

_EOF_

ls -l $FILE_REMOTO

#! / Bin / bash

# Script per recuperare un file tramite FTP FTP_SERVER=ftp.nl.debian.org

FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz


ftp -n << _EOF_ apri $FTP_SERVER

utente anonimo me@linuxbox cd $FTP_PATH

hash

ricevi $REMOTE_FILE ciao

_EOF_

ls -l $FILE_REMOTO


Se modifichiamo l'operatore di reindirizzamento da "<<" a "<<-", la shell ignorerà i caratteri di tabulazione iniziali nel documento here. Questo consente di indentare un documento here, migliorandone la leggibilità:



#! / Bin / bash

# Script per recuperare un file tramite FTP FTP_SERVER=ftp.nl.debian.org

#! / Bin / bash

# Script per recuperare un file tramite FTP FTP_SERVER=ftp.nl.debian.org


FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz


ftp -n <<- _EOF_ apri $FTP_SERVER

utente anonimo me@linuxbox cd $FTP_PATH

hash

ricevi $REMOTE_FILE ciao

_EOF_


ls -l $FILE_REMOTO

FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz


ftp -n <<- _EOF_ apri $FTP_SERVER

utente anonimo me@linuxbox cd $FTP_PATH

hash

ricevi $REMOTE_FILE ciao

_EOF_


ls -l $FILE_REMOTO


Il miglior sistema operativo cloud computing su OnWorks: