2017-12-05 4 views
0

주 목록을 읽는 스크립트가 있는데 while 루프를 사용하여 List A이라고 부릅니다.bash 스크립팅 - 여러 조건을 처리하기위한 효과적인 사례 문 작성 방법

목록 A :

east-1-1 
east-1-3 
east-1-7 
west-1-10 
south-1-2 

casecase과 해당 항목 각각에 대해 나열된 : 내가하고 싶은 무엇

east-1-1 
east-1-2 
east-1-3 
east-1-4 
east-1-5 
east-1-6 
east-1-7 
west-1-1 
west-1-10 
south-1-1 
south-1-2 
north-1-1 

이 목록에 대해 그것을 확인입니다 나는 아래로 깃발을 달고 싶다 *

case "${cluster}" in 
    east-1-1) 
     echo "${cluster}:${getCount} * ";; 
    east-1-3) 
     echo "${cluster}:${getCount} * ";; 
    east-1-7) 
     echo "${cluster}:${getCount} * ";; 
    west-1-10) 
     echo "${cluster}:${getCount} * ";; 
    south-1-2) 
     echo "${cluster}:${getCount} * ";; 
    esac 

함수 내에서이 작업을 수행하고 case 문을 사용하고 있지만이 방법이 잘못되어 더 나은 방법이 있는지 알고 싶습니다. if-then-else을 사용해야합니까? case으로이 작업을 수행 할 수 있습니까?

내가이 접근법에 대해 도움이되거나 더 좋은 방법을 쓸 수 있다면 바랍니다. 진행 중

CODE :

#!/usr/local/bin/bash 

MAP=./.clusterinfo 
if ! [ -f "$MAP" ]; then 
     echo "Cluster Map not found." 
     exit 1 
fi 

while IFS='' read -r cluster; do 
#Function runQuery 
runQuery() 
{ 
    getCount=$(PGPASSWORD=Abc123Pa55word psql -h myapp-"${cluster}".foobar.com -U foo -d dev -p 5439 -t -c "select count(*) from pg_database;") 

    case "${cluster}" in 
    east-1-1) 
     echo "${cluster}:${getCount} * ";; 
    east-1-3) 
     echo "${cluster}:${getCount} * ";; 
    east-1-7) 
     echo "${cluster}:${getCount} * ";; 
    west-1-10) 
     echo "${cluster}:${getCount} * ";; 
    south-1-2) 
     echo "${cluster}:${getCount} * ";; 
    esac 
    echo "${cluster}:${getCount}" 
} 

#Execute 
runQuery 

done < "$MAP" 

전류 출력 :

east-1-1: 50 * 
east-1-1: 50 
east-1-2:  8 
east-1-3: 58 * 
east-1-3: 58 
east-1-4:  5 
east-1-5:  5 
east-1-6:  4 
east-1-7: 30 * 
east-1-7: 30 
west-1-1:  4 
west-1-10: 50 * 
west-1-10: 50 
south-1-2: 30 * 
south-1-2: 30 

예상 출력 :

east-1-1: 50 * 
east-1-2:  8 
east-1-3: 58 * 
east-1-4:  5 
east-1-5:  5 
east-1-6:  4 
east-1-7: 30 * 
west-1-1:  4 
west-1-10: 50 * 
south-1-2: 30 * 

답변

1

나는 당신이 당신의 마지막 echo 문을 넣을 필요가 있다고 생각 D에서 스위치가 아닌 스위치의 오류. 그렇게하면 매번 실행되는 대신 스위치 명령문의 나머지 부분이 실행되지 않을 때 실행됩니다. 그래서

:

case "${cluster}" in 
    east-1-1) 
     echo "${cluster}:${getCount} * ";; 
    east-1-3) 
     echo "${cluster}:${getCount} * ";; 
    east-1-7) 
     echo "${cluster}:${getCount} * ";; 
    west-1-10) 
     echo "${cluster}:${getCount} * ";; 
    south-1-2) 
     echo "${cluster}:${getCount} * ";; 
    *) 
     echo "${cluster}:${getCount}";; 
    esac 
+0

글쎄, 그게 다야! 그 점을 지적 해 주셔서 감사합니다! 그것은 지금 잘 작동합니다. – noober

2

자신의 행동이 동일한 경우, 같은 지점에 모두 해당하는 경우를 열거하여 단순화 할 수 있습니다.

case $cluster in 
    east-1-[137] | west-1-10 | south-1-2) 
     echo "$cluster:$getCount * ";; 
    *) 
     echo "$cluster:$getCount";; 
esac 

또한,이 두 경우 모두 동일 코드를 반영 할 수 있습니다 (기본 처리는 현재 허용 대답에서 붙여 복사 /입니다.).

suffix='' 
case $cluster in 
    east-1-[137] | west-1-10 | south-1-2) 
     suffix=' * ';; 
esac 
echo "$cluster:$getCount$suffix" 
+0

고맙습니다. 이것은 훌륭한 대답이기도합니다. 훨씬 더 깨끗합니다. 귀하의 의견에 감사드립니다! – noober