/* хорошая идея, сработало :)) */
Костяк обрисую. Тема и проста и глубока - шелл скрипт на языке Bash.
Создаётся файл user_list.txt :
user name parameter1 parameter2
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
Создаётся файл setup_iptables.sh :
#!/bin/bash
path_2_user_list="."
user_list_file="user_list.txt"
exit_code_error=100
exit_code_success=0
if ! [ -e "$path_2_user_list/$user_list_file" ] ; then
echo "[$0] Error. File \"$user_list_file\" in directory \"$path_2_user_list\" not found."
exit $exit_code_error
fi
i=0
while read word1 word2 word3 word4 word5 ; do
# если на входе возник лишний параметр, то... - так проверять быть полезно на случай ошибок оператора и т.д. и т.п., проверять можно все параметры...
if ! [ -z "${word5}" ] ; then
echo "[$0] Warning. Extra parameter detected!"
fi
# предположим мне нужен только третий параметр и я заполняю массив из "третьих" параметров
storage[${i}]=${word3}
# может пригодится и такое...
string="$word1 $word2 $word3 $word4"
echo "Iteration number $i, choosen parameter is $(echo "$string" | awk '{print $3}')"
# увеличиваю счётчик
i=$(($i+1))
done < "${path_2_user_list}/${user_list_file}"
echo "Now printing collected data:"
for j in $(seq 0 $i) ; do
# в строке удаляю табуляции и затем заменяю буквы "a" на символ "*"
storage[${j}]="$(echo "${storage[${j}]}" | expand | sed 's/a/*/g')"
if [ -z ${storage[${j}]} ] ; then
echo "Choosen param is void string; j=$j."
else
echo "Choosen param = ${storage[${j}]} ; j=$j."
fi
done
exit $exit_code_success
Сделать
chmod +x iptables_setup.sh
Теперь если оба файла лежат в одном каталоге и в консоли перейти в этот каталог и выполнить
./iptables_setup.sh
то ... Вот так оно работает.
Дальше уже Ваше дело, как применить эти приёмы для формирования правил iptables.