Como eu defino um diretório na variável para fazer o backup do arquivo?

0

Ok, agora eu tenho praticado o Linux há algum tempo e estou brincando com variáveis um pouco, então eu não sou n00b. Estou tentando entender minha lógica neste roteiro muito básico. Eu estou tentando realizar algo extremamente simples. Eu estou tentando copiar /var/log/messages em um diretório (em / ) chamado backup como um arquivo chamado messages.txt

Então, aqui está o script:

#!/bin/bash

BACKP="$BACKDIR/$BACKFILE"

BACKDIR="/backup"

BACKFILE="messages.txt"

echo "Backing up files to $BACKP"

cp /var/log/messages $BACKP

E aqui está minha saída:

Backing up files to /

Além disso, copia o arquivo de mensagens para o sistema de arquivos raiz, que NÃO é totalmente o que eu quero. Eu preciso endireitar minha lógica, eu não tenho absolutamente nenhuma idéia do que estou fazendo de errado. Eu pensei que o roteiro fosse direto.

Por favor ajude.

    
por Leonard 28.01.2018 / 21:36

1 resposta

4

Você precisa definir as coisas antes de usá-las:

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

Para expandir um pouco sobre o ponto, se o shell encontrar isso:

BACKP="$BACKDIR/$BACKFILE"

ele obtém o valor de BACKDIR e o valor de BACKFILE e os substitui. No seu exemplo original, ambos são indefinidos no momento em que o shell encontra a atribuição de BACKP. Os valores de variáveis indefinidas em um programa shell são substituídos por strings vazias , então a atribuição acima é equivalente a

BACKP="/"

Se você definir BACKDIR e BACKFILE primeiro, e então fizer a atribuição ao BACKP, como faço na primeira parte desta resposta, seus valores serão inseridos e você terá o equivalente a

BACKP="/backup/messages.txt"

que é o que você quer.

    
por 28.01.2018 / 21:43