파일을 백업할 변수에 디렉터리를 어떻게 정의할 수 있나요?

파일을 백업할 변수에 디렉터리를 어떻게 정의할 수 있나요?

저는 이 매우 기본적인 스크립트의 논리를 이해하려고 노력하고 있습니다. 나는 아주 간단한 일을 성취하려고 노력하고 있습니다. 라는 파일을 (아래의 ) /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"

이것이 당신이 원하는 것입니다.

관련 정보