2012-11-02 3 views
0

현재의 작업 디렉토리에 존재하는 백업 디렉토리에 모든 현재 디렉토리 파일을 복사하는 간단한 쉘 스크립트를 개발 중입니다. 이제 에 하나 이상의 조건을 전달하면 오류가 발생합니다 ().우분투 쉘 스크립트 오류가 발생했습니다

#!/bin/bash 
filename=nx.pdf 
for i in *; 
do 
echo $i; 
if [ $i == backup || $i == $filename ] ; then 
    echo "Found backup." 
else 
echo "Part 2" 
cp -rf $i backup 
fi 
done 

나는 "당신"에서 $ i가 인용해야 오류를

asd.sh: line 6: [: missing `]' 
asd.sh: line 6: ==: command not found 
Part 2 
deployee.sh 
asd.sh: line 6: [: missing `]' 
asd.sh: line 6: ==: command not found 
Part 2 

답변

1

비교 연산자는 = (POSIX에 정의 된대로)입니다. 그러나 ==는 일부 쉘에서도 작동합니다. 이 같은 뭔가 작동합니다 :

if [ $i = backup ] || [ $i = $filename ] ; then 
1

을 얻고있다. 그렇지 않으면 공백이있는 파일 이름에 대해 구문 오류가 발생합니다.

+0

을 $ [만약 내가 = = 백업]; then echo "Found" 오류가 발생하지 않습니다. –

1

조건에 ||&&을 사용할 수있게하려면 이중 대괄호 사용해야합니다 : 내가 { 을 할 경우

if [[ $i == backup || $i == $filename ]] ; then 
관련 문제