2016-08-14 3 views
-1

루트 디렉토리에 있습니다. 루트> 홈> 로그 및 내부 로그에서 3 개의 로그 파일을 삭제하는 스크립트를 작성하고 있습니다. 스크립트는 존재하는지 확인하고, 존재하면 삭제합니다. 도움이 될만한 문법 문제가 있습니다.유닉스 스크립트 변경 디렉토리

감사

내 코드 : 여기 ./delete를 사용하여 루트에서 파일을 실행할 때

#!/bin/sh 
cd Home/Log 
if [ -e error1.log ] 
then 
rm error1 
fi 
if [ -e error2.log ] 
then 
rm error1 
fi 
if [ -e error3.log ] 
then 
rm error1 
fi 

가 오류로 무엇을 얻고입니다 : 내가

$ ./delete 
: No such file or directoryme/Log 
./delete: line 14: syntax error near unexpected token `fi' 
+1

스크립트를 실행할 때'Home/Log' 경로가 현재 디렉토리입니까? –

+0

예 직접 만들었습니다 – Johnny

+1

쉘에서 명령을 하나 하나 수동으로 실행하면 어떻게됩니까? –

답변

1

루트 디렉토리에

스크립트를 작성할 때 거의 항상 그런 식으로 생각하지 않는 것이 좋습니다. 파일의 위치를 ​​알고 있고 현재 작업중인 디렉토리의 상대적인 위치가 중요하지 않은 경우 이름을 지정하십시오.

안전하게 원하는 것을 달성 할 수있는 세 가지 방법이 있습니다.

#!/bin/sh 
dir=/Home/Log 
rm -f ${dir}/error1.log ${dir}/error2.log ${dir}/error2.log 

또는

#!/bin/sh 
dir=/Home/Log 
rm -f ${dir}/error{1,2,3}.log 

또는 사소 아무것도 들어
#!/bin/sh 
set -e 
cd /Home/Log && rm -f error1.log error2.log error2.log 

, set -e 당신의 친구입니다. 예를 들어, 스크립트에서 나중에 아무 것도 일어나지 않습니다. 당신이 원하지 않는 것은 을 계속 생각하는 것입니다. 당신은 디렉토리를 변경했으나 변경하지 않았으며, 당신이 의도하지 않은 곳으로 낙서를 감아 서 말입니다. 많은 사람들이 그렇게 많이 잃어 버렸습니다.

+0

고맙습니다. – Johnny