2011-07-29 4 views
1

유닉스에서 아래의 문장처럼 디버깅하는 법을 가르쳐주세요. 아래 코드가 수행하는 작업을 이해하는 방법을 단계별로 설명합니다.

if [ ! -f $R_C_S_L/j_r_d* ] 
    then 
echo 0>$R_C_S_L/j_r_d 
fi 
+3

'남자 test' .... –

+0

사용자 환경에서 변수'R_C_S_L'이 있거나 스크립트에서 위의 정의합니까? 이것은 단순히 '이 파일과 일치하는 파일이없는 경우 빈 파일을 만듭니다'이지만 단순히 경로를 알 수있는 문맥이 없습니다. 바라건대 사람도 (? 시험? 배쉬) – Rup

+0

안녕하세요 RUP를이 설명 매뉴얼 페이지에서 당신을 가리킬 수 있습니다, R_C_S_L는 environement.How에서 내 보낸 매개 변수는 어떤 파일이 경로와 일치하지 않는 경우 다음을 만드는 ' "로이 문장을 이해 할 것입니다 빈 파일 "유닉스에서 우리가 어디서 찾을 수 있는지 말해주세요! -f ...]와 같은 명령문이 있습니까? 답변 해 주셔서 감사합니다. 당신이'['와일드 카드가 일치하는 경우 하나 개 이상의 파일에서 오류 메시지가 나타납니다 – user840963

답변

3

그럼 당신은 왼쪽에서 오른쪽으로 읽어 :

if [ ! -f $R_C_S_L/j_r_d* ] 

나는 if[이 분명하다 생각?

man [ 

최대 man test을 제공하고, 거기에 우리가 읽어

NAME 
     test - check file types and compare values 

SYNOPSIS 
     test EXPRESSION 
     test 

     [ EXPRESSION ] 
     [ ] 
     [ OPTION 

을 아래로 더욱 :

-f FILE 
      FILE exists and is a regular file 

파일을?

은 왼쪽에서 파싱됩니다. 여기서 $는 변수입니다. 변수 나 자신을 작성하고, 그들을 함께 아교에서, 나는 $ R_C_S_L 변수가 있으므로, 다음/디렉토리 구분 기호이며, j_r_d는 *는 글 로빙 패턴, 이름의 일부입니다, 그것은 단지 L을 포함 할 것이라는 점을 알고있다.

그래서 파일로, $ R_C_S_L 참조하는 디렉토리는 j_r_d * 검색하여 일치하는, 즉, 테스트, 그리고! 테스트가 실패하면 내면이 완료됩니다.

가장 짧은 파일에 0을 쓰고, 위의 패턴과 일치하는 파일이없는 경우.

+0

훌륭하게 설명해 주셔서 대단히 감사합니다. – user840963

4
  • []는 조건을 둘러싸고 있습니다.
  • !은 NOT 조건 자이며 대괄호 사이에있는 값이 모두 true에서 false로 무효화됩니다.
  • -f은 술어이며 '파일이 존재합니까?'
  • $R_C_S_L은 다른 곳에서 정의 된 변수입니다.
  • *은 와일드 카드입니다.
  • then은 if 블록을 시작합니다.
  • fi은 if 블록을 끝냅니다.
  • echo {stuff}은 화면에 물건을 인쇄합니다.
  • echo {stuff} > {file}은 파일로 리디렉션합니다.

는 위의 문장은 이렇게 번역 될 수있다 :

"다음 쓰기 j_r_d '0'파일 j_r_d에에 디렉토리 $ R_C_S_L에있는 존재하고 문자로 시작하는 파일이있는 경우 $R_C_S_L 디렉터리. "

$ man bash을 참조하십시오.

+0

그런 파일이 없다면 의미 한 것입니다. :) –

+0

그래, 나도 그런 식으로 이해하지만, 좋은 explaination 감사합니다. – user840963

3

그것이 AN/후 한 Statment 경우 ...

if [ I_AM_TRUE ] 
then 
    DO_ME 
fi 

then 정렬 개구 브래킷처럼 fi 일종의 폐쇄 브래킷 비슷하다.

-f FILENAME은 FILENAME이 파일이고 을 넣으면 TRUE입니다. 그 표현의 전면 진리 값을 뒤집에 파일 이름이 파일

echo 인쇄 밖으로 물건이 아닌 경우 기호 > 그 물건을 소요하고 다른 곳에서 다시 지시하면서 ...

그래서 ! -f FILENAME은 TRUE입니다. VAR의 값은 모두 일치하므로 마지막으로

에서, *는 와일드 카드입니다 ... $VAR을 입력하여 입수한다 (아무것도 포함하지 않습니다!)를 특정 파일 접두사 있는지 확인 같은

그래서 보이는 사용 중이며 그렇지 않은 경우 파일을 만들고 그 안에 0을 넣습니다.

if/then 문을 테스트 할 수있는 전체 목록은 http://en.wikipedia.org/wiki/Test_(Unix을 참조하십시오. 위의 프롬프트에 man test을 입력하십시오. 그것은 그것을하는 인간 다운 방법 일 것입니다.