私はiptablesスクリプトを書いており、任意の数の引数を取り、一度に2つずつ使用する関数を作成したいと思います。例は次のとおりです。
#!/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
私が見つけたこのスレッドこれは任意の数のパラメータを繰り返す正しい構文を示していますが、各反復で2つのパラメータを取得する方法はわかりません。呼び出し元から合計(一度に2つの引数)を取得するにはどうすればよいですか$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
1つの違いは、奇数の引数がある場合は$proto
最後の引数が含まれ、空の状態で追加の実行が発生することです($port
前の例で[ "$#" -gt 0 ]
代わりに使用したように)。[ "$#" -ge 2 ]