Возможно, используя awk
+ sed
? Для:
$ cat quiz
23. Lorem
A) he
B) ha
C) hu
c
2. Ipsun yes right to write something here?
A) Ok
B) No
C) yes
b
Run
$ awk NF=NF RS= OFS=' ' quiz | sed 's/\([a-z]$\)/\n\1/'
23. Lorem A) he B) ha C) hu
c
2. Ipsun yes right to write something here? A) Ok B) No C) yes
b
Это прямая отладка скрипта. Если вы запустите скрипт с помощью -x
, вы увидите расширения ваших переменных.
Запустив с -x testcode.sh
(для вашего имени файла как testcode.sh
), 64-я строка становится видимой следующим образом,
-A INPUT -i eth3 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
Причина этого в том, что в качестве действия в этой строке используется $iptables
, а не $IPTABLES
. Переменные (как и большинство вещей в Unix/Linux CLI) чувствительны к регистру.
Продолжая, параметры для iptables
в строке 79 синтаксически неверны:
$IPTABLES -A INPUT -s $ETH -p tcp --dport 3306 -j ACCEPT
Флаг -s
ожидает исходного адреса/подсети , и вы дали ему $ETH3
, имя интерфейса . Вы имели в виду -i $ETH
возможно?
Теперь, строка 85. Начало строки просто ломается (начальные поддельные символы, неправильный регистр на переменной):
$,iptables -A OUTPUT -p icmp --icmp-type 0 -s $ETH -d 10.1.2.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT
Прежде всего, попробуйте просмотреть отображаемые ошибки. Они говорят вам, какие строки вызывают ошибку, и в вашем случае некоторые причины очевидны. См .:
./firewall.sh: line 85: $,iptables: command not found
Вы допустили опечатку, добавив запятую между $
и iptables
.
Тогда вы должны знать, что имена переменных чувствительны к регистру. Таким образом, $ IPTABLES
отличается от $ iptables
.
После того, как вы исправите эти проблемы, ваши строки для разрешения SSH должны быть достаточно хорошими (обратите внимание на правило вывода, где вы должны указать выходной интерфейс -o
, а не -i
])
$IPTABLES -A INPUT -i $ETH2 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -o $ETH2 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT