2013-09-29 3 views
0

그래서 저는 현재 백업 디렉토리에 특정 파일이나 모든 파일을 현재 디렉토리에 백업하는 간단한 백업 스크립트를 작성하고 있습니다. 이 내 스크립트bash 백업 스크립트 오류

#!/bin/bash 

#verify if $1 is empty, if so, copy all content to backup directory 

if [ -z "$1" ] 
then 

    $files=ls 
    #Looping through files 
    for file in $files 
    do 
     cp $file ../backup/ 
    done  
#else copy files specified 

else 

$files=ls $1 

    #Looping through files 
    for file in $files 
    do 
     cp $file ../backup/ 
    done 
fi 

와 내가 갖는 유일한 오류입니다 :

./backup : 행 7 : = 1! :

를 찾을 수없는 명령 스크립트가 ls를 명령으로 인식하지 못하는 이유를 확신하지 못합니다. 어떤 아이디어?

답변

0

ls를 '기호 - 더 좋게, 뒤 따옴표로 넣어야합니다. 이렇게 :

files=`ls` 

여기 약간의 배경. 쉘 환경에서 따옴표에 대한 자세한 내용은 this 페이지를 확인 :

백 따옴표는 문자를 인용에 사용되지 않습니다. 이 문자는 명령 대체에 사용되는 이며, 그 사이의 문자는 쉘에 의해 실행 된 이고 결과는 해당 행에 삽입됩니다.

예 :

files=foo 

는 당신이 필요로하는 VAR에 명령의 출력을 저장 :

echo the date is `date` 
3

변수를 할당하려면 달러 기호가 필요하지 않습니다 :

files=$(ls) 

또는

files=$(ls /path/to/some/dir) 
0

나는 두 개의 실수를 참조하십시오

  1. 당신이 변수 "파일"을 초기화하면 당신은
  2. 명령 LS가 (`) 다시 따옴표에 배치해야 "$"기호를 붙일 안 :

이 짧은 예입니다

#!/bin/bash 

files=`ls` 

for file in $files 
do 
    echo "file: $file" 
done