2017-12-21 40 views
0

bash 스크립팅을 사용하여 두 개의 특정 디렉토리에 특정 수의 파일이 들어 있는지 확인합니다. 20을 가정합니다. if 문 안의 한 행에서 검사 할 수 있습니까?명령을 실행하여 if 문에서 비교하십시오.

#!/bin/bash 

if [ [ls /path/to/dir1 | wc -l ] != 20 || [ ls /path/to/dir2 | wc -l ] != 50 ]; then 
    echo "do this!" 
elif 
    echo "do that!" 
fi 
+0

왜 두 번째 테스트에서 '20'대신 '50'이 사용됩니까? – Barmar

답변

2

구문이 잘못되었습니다 :

if [[ $(ls /path/to/dir1 | wc -l) != 20 || $(ls /path/to/dir2 | wc -l) != 50 ]] 
then 
    echo "do this!" 
else 
    echo "do that!" 
fi 

두 대괄호로

(I 가독성에 대한 then의 위치를 ​​이동) [[-o 대신 "or"에 ||을 사용할 수 있습니다.이 값은 기존 언어에 가깝습니다. 위의 코드는 작동하지만, 그래서 엄밀히, 일치하는 [[ 않습니다 패턴을 말하기, 산술 시험은 정말 ((를 사용해야합니다

if (($(ls /path/to/dir1 | wc -l) != 20 || $(ls /path/to/dir2 | wc -l) != 50)) 
then 
    echo "do this!" 
else 
    echo "do that!" 
fi 

$()는 서브 쉘을 실행하고 출력을 캡처합니다.

2

올바른 if 구문 :

if [ $(ls /path/to/dir1 | wc -l) -ne 20 -o $(ls /path/to/dir2 | wc -l) -ne 50 ]

하지만 당신의 예제에서 당신은 elif을 사용할 수 없습니다. exmpl, 하나 else를 사용하거나 elif에 대한 조건을 지정하는 것은 :

if [ $(ls /path/to/dir1 | wc -l) -ne 20 -o $(ls /path/to/dir2 | wc -l) -ne 50 ] 
then 
    echo "Do smth" 
elif [ $(ls /path/to/dir3 | wc -l) -ne 100 ] 
then 
    echo "Do anything else" 
fi