2014-10-18 3 views
0

질문이 있는데 누군가가 알고 있으면 대답에 감사 할 것입니다. 좋습니다. 내가 그것을 생산해야 어떤 영향 man 페이지 형성을 위해 내가 표현을 다음 한 내 스크립트 중 하나, 그것은 분명하지 않다 :"if"문에 대한 테스트 -

if ! [[ -s "$the_file_to_check" ]] ; then echo "file is zero sized and not exist | is exist and zero sized | not zero sized and not exist | not zero sized or not exist | not exist (obviously zero sized)" ; fi

이 존재합니다 (-a 키)를 별도의 체크인이 존재를 왜 추가 다른 것?

어쨌든이 논리가 어떻게 작동하는지.

약간의 정의가 손실되었습니다.

P.
공허함에 대한 확인이 필요하지만 존재하지는 않습니다. 모두에게 감사하십시오.

+0

. 수표가 무효화되면 -s 키가 어떻게 작동하는지는 내게 불분명하다. – user3694243

+2

'-s'를 사용한 테스트는 :(파일이 존재하고 파일 크기가 nil이 아님) 경우 true입니다. 그래서'! -s'는 (파일이 존재하지 않으면 || 파일 크기는 nil입니다.) 참입니다. 당신의 질문이 정말로 무엇인지 명확히 할 수 있습니까? –

+0

확실하다면 답안에이 설명문을 작성하십시오. 이것은 내가 물었던 것이다. – user3694243

답변

0

이 if 명령은 파일이 없거나 파일 크기가 0 인 경우 단순히 file is zero sized and not exist | is exist and zero sized | not exist (obviously zero sized) 문자열을 인쇄합니다.

당신은 당신의 if 명령은 다음과 같은 것을 할 수있는 존재를 파일 크기가 0 인 파일 만 확인하지하려면 :

if [[ $(du -h "$the_file_to_check" |cut -f 1) == "0" ]] ;then echo "file is zero sized" ; fi

을하지만 파일이 않으면이 if 문은 오류를 게시 할 예정입니다 존재하지 않는다. 파일이있을 때만 이것을 실행하십시오.

+0

질문은 테스트에서 -s 키가 어떻게 작동하는지에 관한 것입니다. bash 수단만으로 파일의 공허를 독점적으로 검사 할 기회가 없습니까? – user3694243

+0

test -s는 "FILE이 있고 크기가 0보다 큰지 확인합니다". 그래서'test -s filename'을 실행하면 파일이 존재하고 그것이 비어 있지 않으면'0'을 반환합니다. 비어 있거나 존재하지 않으면'1'을 반환합니다. 다음과 같이 test 명령의 리턴 값을 확인할 수 있습니다.'test -s filename; echo $? ' – RBH

0

-s은 파일이 있는지뿐만 아니라 데이터가 포함되어 있는지 (즉, 0 바이트보다 큰 경우) 검사합니다. 이 파일은 -a 옵션 (실제로는 -e의 동의어)보다 많습니다.이 옵션은 파일이 있는지 만 테스트합니다.

touch foo 
[[ -a foo ]] && echo "File foo exists" 
[[ -s foo ]] || echo "File foo exists, but is size 0 bytes" 

은 (나는 그것이 -e 다른 것을한다는 것을 잘 모르는 것 같아요 때부터, -a에 대한 근거가 무엇인지 궁금했다.)에 대한 질문을했다

+0

-a 알파벳 순서로 첫 번째입니다. – user3694243

+0

이 사람은 gniourf_gniourf가 물어 본 것에 가장 유사한 설명을주었습니다. 그 이유는 -s 키가 부정적인 맥락에서 사용되면 실제로 어떤 문자 하나에 대해 두 개의 테스트가 포함되기 때문에 어떤 일이 일어날 것인가입니다. – user3694243

+0

@chepner : Posix 출신 : "초기 제안은 KornShell을 기본으로 (같은 의미로) 사용했는데, 이는 사람이 -a와 기본을 혼동 할 가능성이 높다는 우려가 있었기 때문에 -e로 변경되었습니다 이진 연산자. " (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html). Bash (및 ksh)는 backards 호환성을 위해 이전의'-a' 형식을 유지합니다. – rici