리눅스 배쉬 스크립트, 단일 명령이지만 여러 줄?


97

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 스크립트를 포맷 할 수 있습니까?

답변:


129

각 줄의 끝에 "\"를 추가하기 만하면됩니다.

그래서 당신은 다음과 같이 보일 것입니다 :

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 설정

    HOSTNAME = $ (호스트 이름)

  2. (예를 들어, 명령 치환을 사용 $(command))

    위와 같이 보일 것입니다. 사용하기 전에 명령이 실행되도록합니다.

$DATE

피할 수있는 또 다른 변수는 다음과 같습니다.

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

$ man date 날짜 옵션 형식이 있으며 위는 YYYYmmdd입니다.


고마워 마지막 한가지. 내 스크립트의 파일 이름 부분에 문제가 발생한 것 같습니다 : $ HOSTNAME_ $ DATE.tar.gz 지금 스크립트를 실행, 출력 파일은 다음과 같습니다 20121120.tar.gz
제이 라크

실제 "호스트 이름"을 원한다면 다시 진드기 (탭 위의 물결표 "~"키)에 /share/Recovery/Snapshots/`hostname`_$DATE.tar.gz
넣으

@JayLaCroix-언제든지 SU에 오신 것을 환영합니다!
nerdwaller

1
됩니다 권장 사용하는 $(command)대신 `command`.
andrybak

9

백 슬래시를 사용하여 다음 행에서 명령을 계속하십시오.

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

Dang it @Paul! 그냥 날 이길 : D
nerdwaller

@nerdwaller Heh, 나는 네 것이 처음이라고 생각했다!
Paul

나는 그것을 더 유용하게 만들고 들여 쓰기를 얻기 위해 그것을 다시 업데이트했습니다. 나는 SU를 좋아한다.
nerdwaller

예를 들어 이것은 나를 위해 작동하지 않습니다. 에서alias ub='source ~/.bash_aliases \ && source $HOME/.bash_aliases \ && echo "aliases updated."';
TheDefinitionist

1
@TheDefinitionist이 문제와 다른 문제인 것 같습니다. 아마도 새로운 질문을여시겠습니까?
Paul

5

동일한 명령이지만 각 줄에 주석이있는 경우는 다음과 같습니다.

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 \
    /
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.