2014-04-30 6 views
1

단일 루프에 두 개의 배열 변수를 전달, 나는 떠들썩한 파티에서 멍청한 놈되는 조합을 생각,이 작업을 수행 할 수있는 올바른 방법을 모르고, 오른쪽 키워드를 검색하지 마지막 장애물을 극복 할 수 없다는 것을 의미합니다.내가 검색 및 답변을 여기에 검색 한

나는 쉼표로 구분 된 배열 변수의 내용을 기반으로 파일에 설정 라인을 만들 수있는 기본 bash는 스크립트를 쓰고 있어요. 그것은 하나의 변수에 대해서는 완벽하게 작동하지만, 두 개의 배열 변수를 조합 해 보았을 때 제대로 작동하지 않습니다. 나는 루프 내에서 루핑을 시도했는데, 다른 라인을 만들 때 다른 라인과 하나씩 생성한다.

두 변수

반복은 동일한 수있다. 예 :

  • arr1 = SITENAME1, SITENAME2, SITENAME3
  • arr2 = 12 : AC : 23 : BF : 12 : CA, 22 : 드 : A2 : BF : 21 : AC, 01 : E4 : 32 : F0 : 12 : C4

및 I는 루프들을 함께 전달할 :

  • SITENAME1 ($의 Y) 12 : AC : 23 : BF : 12 : CA의 ($ X)
  • SITENAME2 22의 ($ Y) : 드 : A2 : BF : 21 : AC의 ($ X)
  • SITENAME3 ($의 Y) 01 : E4 : 32 : F0 : 12 :

    arr1=$(echo $sites | tr "," "\n") 
    arr2=$(echo $mastermacs | tr "," "\n") 
    IFS="," read -a arr1 <<< "$sites" 
    IFS="," read -a arr2 <<< "$mastermacs" 
    for y in "${!arr1[@]}"; do 
    # for x in "${arr2[@]}"; do 
        n=$(($n+1)) 
        echo "config flexconnect group ${arr1[y]} add"$'\r' >> Flex-cfg.txt 
        echo "config flexconnect group ${arr1[y]} ap add ${arr2[x]} "$'\r' >> Flex-cfg.txt 
        echo "config flexconnect group ${arr1[y]} predownload master ${arr1[y]}_AP01"$'\r' >> Flex-cfg.txt 
        echo "config flexconnect group ${arr1[y]} predownload enable"$'\r' >> Flex-cfg.txt 
        echo "config flexconnect group ${arr1[y]} predownload start primary"$'\r' >> Flex-cfg.txt 
    # done 
    done 
    

    그것은 I '가 특정이 라인이다 : C4의 ($ X)는 여기

는 코드 추출물

echo "config flexconnect group ${arr1[y]} ap add ${arr2[x]} "$'\r' >> Flex-cfg.txt 

을하지만 의미로는 첫 번째마다두고 :이 개 값을 반복하려고 m은 (부수적으로 나뿐만 아니라, 난 그냥 땜질했습니다 단지 $y$x로 사용했습니다). 값 Y는 이름이고 값 X는 MAC 주소입니다.

나도 매우 가깝거나 완전히 완전히 틀렸다. 그래서 친절한 도움으로 할 수 있습니다!

+0

에 가독성을 도움이 있다면 당신은 꽤 빠른 코드에서 길을 잃을 수 있습니까? – choroba

+0

arr1은 알파 문자의 문자열입니다. arr2는 MAC 주소입니다. – danpez

+0

이 코드의 한가지 문제점은'arr1'과'arr2'는 실제로 배열이 아니라는 것입니다; 그들은 줄 바꿈이 포함 된 문자열 일뿐입니다. 'arr1 = ($ (echo $ sites | tr "," "\ n")))'은 (완전하지는 않지만) 더 정확할 것입니다. (다음의'read' 문은'arr1'의 값을 덮어 씁니다. 그래서 초기 할당은 moot입니다.) – chepner

답변

0
IFS=, read -a sz <<< "$sites" 
IFS=, read -a mz <<< "$mastermacs" 
fx='config flexconnect group' 
for x in ${!sz[*]} 
do 
    echo "$fx ${sz[x]} add" 
    echo "$fx ${sz[x]} ap add ${mz[x]}" 
    echo "$fx ${sz[x]} predownload master ${sz[x]}_AP01" 
    echo "$fx ${sz[x]} predownload enable" 
    echo "$fx ${sz[x]} predownload start primary" 
    echo 
done 
  • arr1를 사용하지 마십시오. 당신의 변수 이름이 의미

  • 내가, 여분의 빈 echo을 추가되지는 arr1과 arr2 안에 무엇을 보여줄 수 출력

+0

신속한 답변을 해주신 Steven에게 감사드립니다.내가 달성하고자하는 것은 각 사이트와 MAC을 순환시키는 것입니다. 즉 $ 사이트의 첫 번째 루프는 $ mastermacs에있는 첫 번째 MAC입니다. $ 사이트에서 두 번째는 $ mastermacs 등에서 두 번째 루프가 있습니다. 아마 그 일을하는 데 더 좋은 방법이있을 수 있습니다. 그러나 나는이 물건에 익숙하지 않으므로 장님 인 것처럼 보행 스틱을 깜박입니다. – danpez

+0

죄송합니다. Steven, 나는 언급 했어야했다. 두 개의 루프를 가지고있는 것처럼 $ 사이트의 각 단일 사이트에 대해 $ mastermac에있는 모든 MAC를 반복합니다. 어디에서 내가하려고하는지 각 사이트마다 각 MAC을 정렬하는 것입니다. – danpez

+0

예, 두 변수의 반복 횟수는 같습니다. 나는 그것이 명확하지 않은 경우에 나의 설명, 사과를 새롭게했습니다. – danpez

관련 문제