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

Linux Bash-Skript, ein Befehl, aber mehrere Zeilen?

Ich habe das folgende Skript, das ich durch eine Google-Suche geschrieben habe, und es sichert mein Linux-System in einem Archiv:

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

Das funktioniert, aber ich frage mich, ob ich das Skript so formatieren kann, dass der Befehl über mehrere Zeilen angezeigt wird, etwa so, so dass er später leicht zu bearbeiten ist:

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 
/

Auf diese Weise ist es später leichter zu lesen und zu bearbeiten. Ist es möglich, ein Bash-Skript auf diese Weise zu formatieren?

Antworten (3)

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

Alles, was Sie tun müssen, ist, “\” am Ende jeder Zeile hinzuzufügen, und es sollte gut zu gehen.

Ihr Text sieht dann so aus:

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

(basierend auf Ihrem Kommentar-Update für das Setzen von $HOSTNAME)

$HOSTNAME

Zwei Möglichkeiten, das zu setzen:

  1. HOSTNAME setzen

  2. Befehlssubstitution verwenden (z. B. $(command))

$DATE

Eine andere Variable wäre leicht zu vermeiden:

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

$ man date hat die Formate für die Datumsoptionen, das obige ist YYYYmmdd

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

Verwenden Sie den Backslash, um einen Befehl in der nächsten Zeile fortzusetzen:

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

Der gleiche Befehl, aber mit Kommentaren für jede Zeile, würde lauten:

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