私はこの非常に基本的なスクリプトのロジックを理解しようとしています。私はとても簡単なことを達成しようとしています。というファイルを(下の)/var/log/messages
ディレクトリにコピーしようとしています。/
backup
messages.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"
これがあなたが望むものです。