web-dev-qa-db-ja.com

Linux Bashスクリプト、単一のコマンドで複数行

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スクリプトをこのようにフォーマットすることは可能ですか?

79
Jay LaCroix

あなたがする必要があるのは各行の終わりに "\"を追加することだけであり、それは行ってもいいはずです。

だからあなたのようになります:

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

それを設定する2つのオプション:

  1. HOSTNAMEを設定

    HOSTNAME = $(ホスト名)

  2. コマンド置換を使用する(例:$(command)

    それでそれは上のように見えるでしょう。使用する前にコマンドを実行するだけです。

$DATE

避けられるもう一つの変数は簡単でしょう:

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

$ man dateは日付オプションのフォーマットを持ちます、上記はYYYYmmddです

103
nerdwaller

次の行にコマンドを続けるには、円記号を使用します。

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

同じコマンドですが、各行にコメントが付いています。

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 \
    /
4
Alter Lagos