요소를 제거하는 동안 bash 배열을 반복하는 방법은 무엇입니까?

uihdff

GNU bash , 버전 4.3.42 (1)-릴리스 (arm-openwrt-linux-gnu)

bash 배열을 사용하여 iptables 규칙을 스크립팅하려고합니다.

$ NETID는 네트워크 주소를 만드는 데 사용됩니다. 예 : 192.168. 10 .0 / 24, 192.168. 20 .0 / 24 등

$ {NETID [@]}의 "i"가 $ NETID_TMP에서 제거임시 변수 ($ NETID_TMP)를 만들려고합니다 . 예를 들어 "i"= 10이면 NETID_TMP = (20 30 40)입니다.

스크립트:

    #!/opt/bin/bash
    NETID=(10 20 30 40)
    for (( i=0; i<${#NETID[@]}; i++ )); do
       NETID_TMP=(${NETID[*]})
       unset NETID_TMP[${NETID[i]}]
       iptables -I FORWARD -s 192.168.${NETID[i]}.0/24 -d 192.168.${NETID_TMP[0]}.0/24,192.168.${NETID_TMP[1]}.0/24,192.168.${NETID_TMP[2]}.0/24 -j DROP
    done

결과는 ...

iptables -I FORWARD -s 192.168.10.0/24 -d 192.168.20.0/24,192.168.30.0/24,192.168.40.0/24 -j DROP
iptables -I FORWARD -s 192.168.20.0/24 -d 192.168.10.0/24,192.168.30.0/24,192.168.40.0/24 -j DROP
iptables -I FORWARD -s 192.168.30.0/24 -d 192.168.10.0/24,192.168.20.0/24,192.168.40.0/24 -j DROP
iptables -I FORWARD -s 192.168.40.0/24 -d 192.168.10.0/24,192.168.20.0/24,192.168.30.0/24 -j DROP
Kusalananda
netid=(10 20 30 40)

for i in "${netid[@]}"; do
    out="iptables -I FORWARD -s 192.168.$i.0/24 -d "

    for j in "${netid[@]}"; do
        (( i == j )) && continue
        out+="192.168.$j.0/24,"
    done
    out="${out%,} -j DROP"

    printf '%s\n' "$out"
done

이 Bash 스크립트는

iptables -I FORWARD -s 192.168.10.0/24 -d 192.168.20.0/24,192.168.30.0/24,192.168.40.0/24 -j DROP
iptables -I FORWARD -s 192.168.20.0/24 -d 192.168.10.0/24,192.168.30.0/24,192.168.40.0/24 -j DROP
iptables -I FORWARD -s 192.168.30.0/24 -d 192.168.10.0/24,192.168.20.0/24,192.168.40.0/24 -j DROP
iptables -I FORWARD -s 192.168.40.0/24 -d 192.168.10.0/24,192.168.20.0/24,192.168.30.0/24 -j DROP

이중 루프를 통해. 내부 루프는 루프 변수가 외부 루프의 루프 변수와 수치 적으로 동일한 반복을 건너 뛰어 원하는 효과를 만듭니다.

에 문자열이 $out있으면 할 수 eval있습니다.

또는 피하려면 eval다음을 수행하십시오.

netid=(10 20 30 40)

for i in "${netid[@]}"; do
    sarg="192.168.$i.0/24"
    darg=""

    for j in "${netid[@]}"; do
        (( i == j )) && continue
        darg+="192.168.$j.0/24,"
    done
    darg="${darg%,}"

    iptables -I FORWARD -s "$sarg" -d "$darg" -j DROP
done

변수 대체 ${parameter%word}word의 맨 끝에서 제거 $parameter되므로 darg="${darg%,}"af 끝에서 쉼표를 제거합니다 $darg.


댓글에서 질문 후 업데이트 :

유일한의 bash위의에 대한 특이 배열의 사용이다 $netid+=운영자는에 추가 할 $darg문자열 ((...)). 이것을 다음 sh과 같은 스크립트 로 바꿀 수 있습니다 (여기서는 $IFS여전히 기본값이 있다고 가정 합니다).

netid="10 20 30 40"

for i in $netid; do
    sarg="192.168.$i.0/24"
    darg=""

    for j in $netid; do
        [ "$i" -eq "$j" ] && continue
        darg="${darg}192.168.$j.0/24,"
    done
    darg="${darg%,}"

    iptables -I FORWARD -s "$sarg" -d "$darg" -j DROP
done

연결하려는 별도의 번호 목록이있는 경우 $darg대신 내부 루프에서 사용하십시오 $netid. 공백으로 구분 된 숫자 문자열이어야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

요소를 제거하는 동안 bash 배열을 반복하는 방법은 무엇입니까?

분류에서Dev

웹 요소를 반복하는 동안 None을 제거하는 방법은 무엇입니까?

분류에서Dev

Bash에서 두 배열의 요소 조합을 반복하는 방법은 무엇입니까?

분류에서Dev

bash에서 배열의 마지막 요소를 제거하는 방법은 무엇입니까?

분류에서Dev

BASH에서 동적으로 배열을 반복하는 루프를 확장하는 방법은 무엇입니까?

분류에서Dev

rm이 확인을 요청하는 동안 삭제를 자동 취소하는 방법은 무엇입니까?

분류에서Dev

배열에서 하위 배열의 동일한 요소를 가진 모든 조합을 제거하는 방법은 무엇입니까?

분류에서Dev

항목을 제거하는 동안 맵에서 반복하는 방법은 무엇입니까?

분류에서Dev

배열을 반복하지 않고 $ scope에서 개체를 제거하는 방법은 무엇입니까?

분류에서Dev

MATLAB : 두 개의 해당 열 벡터에서 반복 요소를 제거하는 방법은 무엇입니까?

분류에서Dev

객체의 PostgreSQL jsonb 배열을 반복하고 요소를 수정하는 방법은 무엇입니까?

분류에서Dev

문자 배열에서 요소를 제거하거나 특정 요소없이 새 배열의 복사본을 만드는 방법은 무엇입니까?

분류에서Dev

배열을 요소로 사용하여 배열을 반복하는 방법은 무엇입니까?

분류에서Dev

React에서 맵을 사용하는 동안 '키'오류를 제거하는 방법은 무엇입니까?

분류에서Dev

배열 요소가 bash에서 모두 동일한 지 테스트하는 방법은 무엇입니까?

분류에서Dev

생성 한 임의 배열에서 중복 요소를 제거하는 방법은 무엇입니까?

분류에서Dev

Bash의 문자열에서 중복 된 문자를 제거하는 방법은 무엇입니까?

분류에서Dev

동적 배열에서 v-for 요소를 표시하거나 숨기는 방법은 무엇입니까?

분류에서Dev

json jquery를 구문 분석하는 동안 배열을 분리하는 방법은 무엇입니까?

분류에서Dev

배열 배열을 각도로 반복하는 방법은 무엇입니까? 방법을 보여주세요

분류에서Dev

요소에 html을 추가하는 동안 CSS를 잃지 않는 방법은 무엇입니까?

분류에서Dev

요소에 html을 추가하는 동안 CSS를 잃지 않는 방법은 무엇입니까?

분류에서Dev

지시문을 사용하는 동안 요소를 숨기는 방법은 무엇입니까?

분류에서Dev

C ++에서 벡터를 반복하는 동안 요소를 지우거나 변경하는 방법은 무엇입니까?

분류에서Dev

공백 만 포함하는 배열 요소를 제거하는 방법은 무엇입니까?

분류에서Dev

공백을 제거하는 동안 셀을 새 위치로 복사하는 방법은 무엇입니까?

분류에서Dev

배열에서 요소를 무작위로 반복하지 않는 방법은 무엇입니까?

분류에서Dev

Numpy 배열을 만드는 동안 정밀도 오류를 피하는 방법은 무엇입니까?

분류에서Dev

반복하지 않고 배열에 요소를 푸시하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    요소를 제거하는 동안 bash 배열을 반복하는 방법은 무엇입니까?

  2. 2

    웹 요소를 반복하는 동안 None을 제거하는 방법은 무엇입니까?

  3. 3

    Bash에서 두 배열의 요소 조합을 반복하는 방법은 무엇입니까?

  4. 4

    bash에서 배열의 마지막 요소를 제거하는 방법은 무엇입니까?

  5. 5

    BASH에서 동적으로 배열을 반복하는 루프를 확장하는 방법은 무엇입니까?

  6. 6

    rm이 확인을 요청하는 동안 삭제를 자동 취소하는 방법은 무엇입니까?

  7. 7

    배열에서 하위 배열의 동일한 요소를 가진 모든 조합을 제거하는 방법은 무엇입니까?

  8. 8

    항목을 제거하는 동안 맵에서 반복하는 방법은 무엇입니까?

  9. 9

    배열을 반복하지 않고 $ scope에서 개체를 제거하는 방법은 무엇입니까?

  10. 10

    MATLAB : 두 개의 해당 열 벡터에서 반복 요소를 제거하는 방법은 무엇입니까?

  11. 11

    객체의 PostgreSQL jsonb 배열을 반복하고 요소를 수정하는 방법은 무엇입니까?

  12. 12

    문자 배열에서 요소를 제거하거나 특정 요소없이 새 배열의 복사본을 만드는 방법은 무엇입니까?

  13. 13

    배열을 요소로 사용하여 배열을 반복하는 방법은 무엇입니까?

  14. 14

    React에서 맵을 사용하는 동안 '키'오류를 제거하는 방법은 무엇입니까?

  15. 15

    배열 요소가 bash에서 모두 동일한 지 테스트하는 방법은 무엇입니까?

  16. 16

    생성 한 임의 배열에서 중복 요소를 제거하는 방법은 무엇입니까?

  17. 17

    Bash의 문자열에서 중복 된 문자를 제거하는 방법은 무엇입니까?

  18. 18

    동적 배열에서 v-for 요소를 표시하거나 숨기는 방법은 무엇입니까?

  19. 19

    json jquery를 구문 분석하는 동안 배열을 분리하는 방법은 무엇입니까?

  20. 20

    배열 배열을 각도로 반복하는 방법은 무엇입니까? 방법을 보여주세요

  21. 21

    요소에 html을 추가하는 동안 CSS를 잃지 않는 방법은 무엇입니까?

  22. 22

    요소에 html을 추가하는 동안 CSS를 잃지 않는 방법은 무엇입니까?

  23. 23

    지시문을 사용하는 동안 요소를 숨기는 방법은 무엇입니까?

  24. 24

    C ++에서 벡터를 반복하는 동안 요소를 지우거나 변경하는 방법은 무엇입니까?

  25. 25

    공백 만 포함하는 배열 요소를 제거하는 방법은 무엇입니까?

  26. 26

    공백을 제거하는 동안 셀을 새 위치로 복사하는 방법은 무엇입니까?

  27. 27

    배열에서 요소를 무작위로 반복하지 않는 방법은 무엇입니까?

  28. 28

    Numpy 배열을 만드는 동안 정밀도 오류를 피하는 방법은 무엇입니까?

  29. 29

    반복하지 않고 배열에 요소를 푸시하는 방법은 무엇입니까?

뜨겁다태그

보관