linux shell 如何提取文本的每一行作为变量,让命令调用执行

有以下文本:
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
如何处理,让 firewalld 依次添加每一行,并添加预定的规则。
如果按照一条记录执行,会提示Error: INVALID_RULE: internal error in _lexer(): address=

阅读 4.2k
2 个回答

用while循环结合read读行命令

while read -r line; do
    ...... $line ......
done < file.txt
  1. 添加 ipset
    firewall-cmd --permanent --zone=drop --add-source=ipset:auto_ban
  2. 将 ipset 应用到 drop 规则
    firewall-cmd --add-rich-rule='rule source ipset=auto_ban drop'
    firewall-cmd --add-rich-rule='rule source ipset=auto_ban drop' --per
  3. 脚本内容如下:
    #!/bin/bash
    systemctl status shadowsocks-libev -l > /tmp/ip.txt
    grep -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /tmp/ip.txt > /tmp/ip_block.txt
    firewall-cmd --permanent --ipset=auto_ban --add-entries-from- file=/tmp/ip_block.txt
    firewall-cmd --reload
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题