web-dev-qa-db-fra.com

Script Bash Linux, commande unique mais plusieurs lignes?

J'ai le script suivant que j'ai écrit en effectuant une recherche sur Google et qui sauvegarde mon système Linux sur une archive:

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

Cela fonctionne, mais je me demande si je peux formater le script pour afficher la commande sur plusieurs lignes, comme cela, afin qu'il soit facile de l'éditer ultérieurement:

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 cette façon, il est plus facile de lire et d’éditer plus tard. Est-il possible de formater un script Bash de cette façon?

78
Jay LaCroix

Tout ce que vous devez faire est d’ajouter "\" à la fin de chaque ligne et il devrait être bon de partir.

Ainsi, le vôtre ressemblera à:

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

Quelques raccourcis

(en fonction de la mise à jour de vos commentaires pour le paramètre $ HOSTNAME)

$HOSTNAME

Deux options pour définir cela:

  1. Définir le nom d'hôte

    HOSTNAME = $ (nom d'hôte)

  2. Utiliser la substitution de commande (par exemple, $(command))

    Donc, cela ressemblerait à ce qui précède Cela fait juste exécuter la commande avant de l’utiliser.

$DATE

Une autre variable évitée serait facilement:

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

$ man date aura les formats pour les options de date, le ci-dessus est AAAAMMJJ

102
nerdwaller

Utilisez la barre oblique inverse pour continuer une commande sur la ligne suivante:

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

La même commande, mais avec des commentaires pour chaque ligne, serait:

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 \
    /
4
Alter Lagos