ファイルをバックアップする変数にディレクトリをどのように定義できますか?

ファイルをバックアップする変数にディレクトリをどのように定義できますか?

私はこの非常に基本的なスクリプトのロジックを理解しようとしています。私はとても簡単なことを達成しようとしています。というファイルを(下の)/var/log/messagesディレクトリにコピーしようとしています。/backupmessages.txt

スクリプトは次のとおりです。

#!/bin/bash

BACKP="$BACKDIR/$BACKFILE"

BACKDIR="/backup"

BACKFILE="messages.txt"

echo "Backing up files to $BACKP"

cp /var/log/messages $BACKP

これは私の結果です。

Backing up files to /

また、メッセージファイルをルートファイルシステムにコピーしますが、これは私が望むものではありません。論理を正すべきですが、私が何を間違っているのかわかりません。

答え1

あなたは物事を定義する必要があります今後あなたはそれらを使います:

BACKDIR="/backup"
BACKFILE="messages.txt"
BACKP="$BACKDIR/$BACKFILE"
...

シェルで次の状況が発生した場合は、これを少し拡張してみましょう。

BACKP="$BACKDIR/$BACKFILE"

それはその価値BACKDIRとその価値を取り、BACKFILEそれを置き換えます。元の例では、シェルが BACKP 割り当てを検出した場合、両方の値は定義されません。シェルプログラムで定義されていない変数の値は、次に置き換えられます。空の文字列したがって、上記の割り当ては次のとおりです。

BACKP="/"

しかし、BACKDIRとBACKFILEを最初に定義すると、それからこの答えの最初の部分で行ったように、BACKPに割り当ててその値を連結すると、次のような結果が得られます。

BACKP="/backup/messages.txt"

これがあなたが望むものです。

関連情報