73

У меня есть следующий сценарий, который я написал, выполнив поиск в Google, и он создает резервную копию моей системы Linux в архив:

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

Это работает, но мне интересно, смогу ли я отформатировать сценарий так, чтобы команда отображалась в нескольких строках, что-то вроде этого, поэтому его легко отредактировать позже:

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 
/

Таким образом, его легче читать и редактировать позже. Можно ли отформатировать скрипт Bash таким образом?

3 ответа3

94

Все, что вам нужно сделать, это добавить «\» в конце каждой строки, и это должно быть хорошо.

Так что ваш будет выглядеть так:

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

Несколько ярлыков

(основываясь на обновлении вашего комментария для установки $ HOSTNAME)

$HOSTNAME

Два варианта, чтобы установить это:

  1. Установить имя хоста

    HOSTNAME = $(имя хоста)

  2. Используйте подстановку команд (например, $(command))

    Так будет выглядеть выше. Это просто заставляет команду работать перед использованием.

$DATE

Другая переменная, которую можно избежать, будет легко:

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

$ man date будет иметь форматы для параметров даты, выше YYYYmmdd

7

Используйте обратную косую черту, чтобы продолжить команду в следующей строке:

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

Та же команда, но с комментариями для каждой строки:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .