2017-12-14 2 views
1

두 개의 배열로 다음 레코드가 있는지 확인하고 싶습니다. 나는이 그것에 대해가는 가장 좋은 방법인지 모르겠지만, 아래 코드에서 가능하다 같은 논리에서 보이는 :두 개의 배열을 사용하여 DNS 레코드가 배쉬에 있는지 확인하려면 어떻게해야합니까?

위의 코드가 실행
Domain_checking() { 
    array=(
     grafana 
     kibana 
     prometheus 
     alertmanager 
    ) 

    array2=(
     Name 
     NXDOMIAN 
    ) 


    for index in ${!array[*]}; do 
     echo "checking that ${array[$index]} exists in the domain domain.co.uk" 
     DOMAIN_CHECK=$(nslookup ${array[$index]}.domain.co.uk | grep {array2[$index]}) 
     if [[ $DOMAIN_CHECK == *'Name'* ]]; then 
      echo "The A record for ${array[$index]}.domain.co.uk exists" 
     elif [[ $DOMAIN_CHECK == *'NXDOMIAN'* ]]; then 
      echo "The A record for ${array[$index]}.domain.co.uk dose not exist" 
     fi 
    done 
} 

Domain_checking 

, 루프가 시작하지 그리고 echo 문에 대해서는 을 echo 문에 추가하면 두 배열의 값을 볼 수 있습니다.

그러나 배열 값은 DOMAIN_CHECK에 없습니다. 이것이 for 루프가 반복되는 이유는 확실하지 않습니다.

그래서 나는 DOMAIN_CHECK에 어떤 종류의 값이 있어야하고 if 문을 사용해야한다고 생각합니다. 그러나 어떤 이유로 든이 경우가 아닌 것 같습니다. 왜 그런가요?

+2

"변수"의 모든 인스턴스를 참조 할 변수로 바꿀 수 있습니까? –

+0

ok 변수가 DOMAIN_CHECK 인 질문을 업데이트했습니다. – user3700919

+1

'| grep {array2 [$ index]}'? 어느 쪽이든 구문 오류가 발생했습니다. grep $ {array2 [$ index]}' – arco444

답변

2

당신은 도메인이 아니라 명령에서 특정 정보를 찾는 것보다, 존재 여부 있는지 nslookup를 사용하고 나타납니다. 당신은 종료 코드를 확인하는 대신 GREP을 사용하여 단순화 할 수 있습니다 : 도메인 기록이 존재

Domain_checking() { 
    array=(
     grafana 
     kibana 
     prometheus 
     alertmanager 
    ) 

    for domain in ${array[@]} 
    do 
     if nslookup "${domain}.domain.co.uk" >/dev/null 2>&1 ; then 
     echo "$domain exists" 
     else 
     echo "$domain does not exist" 
     fi 
    done 
} 

Domain_checking 

경우, nslookup0를 반환하고 if 조건은 만족하실 것입니다. 그 밖의 것은 실패를 나타내며 컨트롤은 else으로 전달됩니다.

+0

고맙습니다. 의도 한대로 작동합니다. – user3700919

2

두 배열의 색인으로 $index을 사용하지만 첫 번째 항목에만 일치 항목이 $array2에 있습니다. 이것이 다른 항목이 표시되지 않는 이유이며 grep이 필수 인수가 누락 된 이유입니다.

논리를 통해 생각해 보면 grep에 대해서는 두 번째 배열을 완전히 제거하지 않고 하드 코드를 Name에서 제거 할 이유가 없습니다.

생각해 보면, 첫 번째 배열은별로 도움이되지 않습니다. 배열 인덱스가 아닌 이름 자체를 반복하여 코드를 단순화 할 수 있습니다.

domain=some.thing 
names="kibana prometheus graphite" 
for name in $names; do 
    nslookup $name.$domain .... 
done 
+0

안녕하세요 도와 주셔서 감사합니다, 당신은 코드를 단순화의 측면에서 올바른지, 내가 생각하기 때문에 2 일 배열을 먼저 일을 내가 제대로 순서로 이상적으로 두 번째 배열을 루프해야 할 것입니다 – user3700919

관련 문제