저는 iptables 스크립트를 작성 중이고 임의 개수의 인수를 취하여 한 번에 두 개씩 사용하는 함수를 작성하고 싶습니다. 예는 다음과 같습니다.
#!/bin/sh
# Allow inbound sessions for a specific service
iptables --append INPUT --protocol $PROTO --destination-port $PORT \
--match state --state NEW --jump ACCEPT || exit 1
내가 찾은이 스레드이것은 임의 개수의 매개변수를 반복하는 올바른 구문을 보여 주지만 각 반복에서 두 개의 매개변수를 얻는 방법을 모르겠습니다. 호출자로부터 합계(한 번에 두 개의 인수)를 얻으려면 어떻게 해야 합니까 $PROTO
?$PORT
$@
답변1
다음을 수행할 수 있습니다.
#! /bin/sh -
while [ "$#" -ge 2 ]; do
proto=$1 port=$2
shift 2
iptables --append INPUT --protocol "$proto" --destination-port "$port" \
--match state --state NEW --jump ACCEPT || exit 1
done
그리고 zsh
:
#! /bin/zsh -
for proto port do
iptables --append INPUT --protocol "$proto" --destination-port "$port" \
--match state --state NEW --jump ACCEPT || exit 1
done
한 가지 차이점은 홀수 개의 인수가 있는 경우 $proto
마지막 인수가 포함되고 비어 있는 상태로 추가 실행이 발생한다는 것입니다( $port
이전 예제에서 [ "$#" -gt 0 ]
대신 사용한 것처럼).[ "$#" -ge 2 ]