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

Linux Bash Script, één commando maar meerdere regels?

Ik heb het volgende script dat ik geschreven heb door op Google te zoeken, en het maakt een back-up van mijn Linux systeem naar een archief:

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

Dit werkt, maar ik vraag me af of ik het script zo kan formatteren dat het commando over meerdere regels wordt weergegeven, zoiets als dit, zodat het later gemakkelijk te bewerken is:

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 
/

Op die manier is het gemakkelijker te lezen en later te bewerken. Is het mogelijk om een Bash script op deze manier op te maken?

Antwoorden (3)

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

U hoeft alleen maar “\” toe te voegen aan het eind van elke regel en het zou goed moeten zijn om te gaan.

Dus die van jou ziet er als volgt uit:

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

A Few Shortcuts

(gebaseerd op uw commentaar update voor het instellen van $HOSTNAME)

$HOSTNAME

Twee opties om dat in te stellen:

  1. HOSTNAME instellen

  2. Gebruik commandosubstitutie (bijv. $(command))

$DATE

Een andere te vermijden variabele zou gemakkelijk zijn:

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

$ man date zullen de formaten voor de datumopties hebben, de bovenstaande is YYYYmmdd

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

Gebruik de backslash om een commando op de volgende regel voort te zetten:

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

Hetzelfde commando, maar met commentaar voor elke regel, zou zijn:

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