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


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

回答:


130

必要なのは、各行の最後に「\」を追加するだけです。

そのため、次のようになります。

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です


みんなありがとう。最後に一つだけ。スクリプトのファイル名部分に問題があるようです:$ HOSTNAME_ $ DATE.tar.gz今スクリプトを実行すると、出力ファイルは20121120.tar.gz
Jay LaCroix

実際の「ホスト名」が必要な場合は、バックティック(タブの上のチルダ「〜」キー)に入れてください /share/Recovery/Snapshots/`hostname`_$DATE.tar.gz
。– nerdwaller

いつでも@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 \
/

@Paul!ちょうど私を打つ:D-
オタクウォーラー

@nerdwallerへぇ、私はあなたのものが最初に入ったと思った!
ポール

私はそれを更新して、より便利にし、インデントを取得しました。私はSUが大好きです。
オタクウォーラー

これは、例えば私にとってはうまくいきません。inalias ub='source ~/.bash_aliases \ && source $HOME/.bash_aliases \ && echo "aliases updated."';
TheDefinitionist

1
@TheDefinitionistは、これとは別の問題のように聞こえます。おそらく新しい質問を開きますか?
ポール

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.