По умолчанию grep
печатает соответствующую строку. Чтобы подавить это действие, вы можете использовать grep -q
:
#!/bin/bash
if iptables -L -n | grep -q -- "ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8880";
then
echo "ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8880 exists"
else
echo "ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8880 does not exist"
fi
if iptables -L -n | grep -q -- "ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80";
then
echo "ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 exists"
else
echo "ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 does not exist"
fi
Вы также можете упростить свой сценарий до этого:
#!/bin/bash
rules=( "ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8880" "ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80")
for rule in "${rules[@]}"
do
iptables -L -n | grep -q "$rule" && echo "$rule exists" || echo "$rule does not exist"
done
Или, если вы хотите иметь несколько действий, используйте if/else, например:
#!/bin/bash
rules=( "ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8880" "ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80")
for rule in "${rules[@]}"
do
if iptables -L -n | grep -q "$rule"
then
echo "$rule exists"
else
echo "$rule does not exist"
fi
done
En caso de que necesite presionar espacio más o menos de 3 veces, haría algo como
expect {
"Press space" { # or whatever the pager prompt is
send " "
exp_continue; # this "loops" back to the expect statement
}
"#"
}
send "exit\r"
expect eof