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

bash linux script tar

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

  149  Jay LaCroix  2012-11-21


ベストアンサー

必要なのは、各行の最後に”\”を追加するだけで、それは行くのが良いはずです

あなたのはこんな感じになるのね

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. Set HOSTNAME

    HOSTNAME=$(hostname)

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

    そうすると上のようになります。これは使う前にコマンドを実行させているだけです

$DATE

別の変数を回避することは容易であろう

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

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

197  nerdwaller  2012-11-21


次の行でコマンドを続行するには、バックスラッシュを使用します

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

17  Paul  2012-11-21


同じコマンドですが、各行にコメントをつけると次のようになります

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

8  Alter Lagos  2018-01-17


bashで使えます

PARAMS=(
-cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz
--exclude=`enter code here`/proc
--exclude=/lost+found
--exclude=/sys
--exclude=/mnt
# this is a comment
--exclude=/media
--exclude=/dev
# --exclude=/something
--exclude=/share/Archive
/
)
tar ${PARAMS[@]}

3  Axel Heider  2020-04-04


タイトルとURLをコピーしました