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

Linux Bash Script, une seule commande mais plusieurs lignes ?

J'ai le script suivant que j'ai écrit en cherchant sur Google, et il sauvegarde mon système Linux dans 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, quelque chose comme ceci, afin qu'il soit facile à modifier plus tard :

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 à lire et à modifier plus tard. Est-il possible de formater un script Bash de cette façon ?

Réponses (3)

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

Il vous suffit d'ajouter “\” à la fin de chaque ligne et le tour est joué.

Donc, 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 votre commentaire pour le réglage de $HOSTNAME)

$HOSTNAME

Deux options pour régler cela :

  1. définir HOSTNAME

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

$DATE

Une autre variable à éviter serait facilement :

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

$ man date aura le format des options de date, le format ci-dessus est YYYYmmdd

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

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 \
/
6
6
6
2018-01-17 22:03:43 +0000

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