2012-11-21 03:09:10 +0000 2012-11-21 03:09:10 +0000
117
117

Script Bash de Linux, ¿un solo comando pero varias líneas?

Tengo el siguiente script que escribí buscando en Google, y hace una copia de seguridad de mi sistema Linux en un archivo:

#!/bin/bash
# init

DATE=$(date +20%y%m%d)

tar -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev --exclude=/share/Archive /

Esto funciona, pero me pregunto si puedo formatear el script para mostrar el comando en varias líneas, algo así, para que sea fácil de editar después:

tar -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz 
--exclude=/proc 
--exclude=/lost+found 
--exclude=/sys 
--exclude=/mnt 
--exclude=/media 
--exclude=/dev 
--exclude=/share/Archive 
/

De esta manera es más fácil de leer y editar después. ¿Es posible formatear un script Bash de esta manera?

Respuestas (3)

153
153
153
2012-11-21 03:14:44 +0000

Todo lo que debería hacer es añadir “\” al final de cada línea y debería ser bueno para ir.

Así que el tuyo se verá así:

tar -cvpzf /share/Recovery/Snapshots/$(hostname)_$(date +%Y%m%d).tar.gz \
    --exclude=/proc \
    --exclude=/lost+found \
    --exclude=/sys \
    --exclude=/mnt \
    --exclude=/media \ 
    --exclude=/dev \
    --exclude=/share/Archive \
    /

Algunos atajos

(basado en la actualización de su comentario para establecer $HOSTNAME)

$HOSTNAME

Dos opciones para establecerlo:

  1. Establecer HOSTNAME

  2. Utilizar la sustitución de comandos (por ejemplo, $(command))

$DATE

Otra variable que se evita sería fácilmente:

$(hostname)_$(date +%Y%m%d).tar.gz \

$ man date tendrá los formatos para las opciones de fecha, la anterior es YYYYmmdd

11
11
11
2012-11-21 03:15:48 +0000

Utilice la barra invertida para continuar un comando en la línea siguiente:

tar -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz \
--exclude=/proc \
--exclude=/lost+found \
--exclude=/sys \
--exclude=/mnt \
--exclude=/media \
--exclude=/dev \
--exclude=/share/Archive \
/
6
6
6
2018-01-17 22:03:43 +0000

El mismo comando, pero con comentarios para cada línea, sería

tar -cvpzf /share/Recovery/Snapshots/$(hostname)_$(date +%Y%m%d).tar.gz `#first comment` \
    --exclude=/proc `#second comment` \
    --exclude=/lost+found `# and so on...` \
    --exclude=/sys \
    --exclude=/mnt \
    --exclude=/media \ 
    --exclude=/dev \
    --exclude=/share/Archive \
    /