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