Script Bash Linux, comando único, mas várias linhas?

67

Eu tenho o seguinte script que escrevi pesquisando no Google e ele faz o backup do meu sistema Linux em um arquivo:

#!/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 /

Isso funciona, mas estou querendo saber se posso formatar o script para mostrar o comando em várias linhas, algo assim, por isso é fácil editá-lo depois:

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 
/

Dessa forma, é mais fácil ler e editar mais tarde. É possível formatar um script Bash dessa maneira?

    
por Jay LaCroix 21.11.2012 / 04:09

3 respostas

85

Tudo o que você precisa fazer é adicionar "\" ao final de cada linha e deve ser bom.

Então, o seu será parecido com:

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 \
    /

Alguns atalhos
(com base na sua atualização de comentário para definir $ HOSTNAME)

$ HOSTNAME

Duas opções para definir isso:

1) Defina HOSTNAME

HOSTNAME=$(hostname)

2) Use a substituição de comando (por exemplo, $(command) )

Então, seria parecido com acima. Isso apenas faz o comando rodar antes de usá-lo.

$ DATE

Outra variável evitada seria facilmente:

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

$ man date terá os formatos das opções de data, o acima é YYYYmmdd

    
por 21.11.2012 / 04:14
7

Use a barra invertida para continuar um comando na próxima linha:

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 \
/
    
por 21.11.2012 / 04:15
1

O mesmo comando, mas com comentários para cada linha, seria:

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 \
    /
    
por 17.01.2018 / 23:03