我找了个老哥帮我看了一下,下面是结果
--------------------------------------------
#!/bin/bash
CHNROUTE_RULES=/config/user-data/chnroute.txt
CHNROUTE_RULES_CHCHE=/config/user-data/chnroute.ipset
if [-e $CHNROUTE_RULES_CHCHE]; then
#中括号内 -e 判断文件是否存在
ipset -! restore < $CHNROUTE_RULES_CHCHE
# -! 参数忽略错误和提示信息,比如已经存在的 set 提示是否覆盖, 文件不存在报错
# < 重定向符, 作为 ipset 的输入, 把文件内容输入到 ipset 命令中
else
sed -e "s/^/add chnroute &/g" $CHNROUTE_RULES | awk '{print $0} END {print "COMMIT"}' | ipset -R
# | 管道符, 左边的输出 传到右边, 作为右边的输入
# sed -e "s/^/add chnroute &/g" $CHNROUTE_RULES : 一行一行读取$CHNROUTE_RULES 文件,每行在开头插入"add chnroute &", -e 执行正则表达式脚本 "s/^/add chnroute &/g" s 替换 ^每行首段 /g 全行替换
# awk $0 输出每行, END 在结束时候, 输出 COMMIT
# 一行一行读取并执行,测试命令,实时输出,而不是最后整体输出: find .| awk '{print NR $0 " line end"} END {print "COMMIT"}'
ipset save chnroute > $CHNROUTE_RULES_CHCHE
#保存名为 chnroute 的集合,输出到文件当中
fi
#fi 结束,对应 if
#参考:
#一. -e 参数
# if [[ -e readme.txt ]] ; then
# echo '文件"readme.txt" 存在.'
# else
# echo '文件"readme.txt" 不存在.'
# fi
#二.ipset 参考链接
https://www.cnblogs.com/wn1m/p/10919940.html#三.sed 参考链接
http://c.biancheng.net/view/4028.html#四.awk 参考链接
https://www.runoob.com/linux/linux-comm-awk.html # 命令验证指令,NR 是打印输入的行号 sed -e "s/^/add chnroute &/g" 1.txt | awk '{print NR $0 " line end"} END {print "COMMIT"}' > 2.txt
# 1.txt 内容为
# 1
# 2
# 3
# 输出的 2.txt
# 1add chnroute 1 line end
# 2add chnroute 2 line end
# 3add chnroute 3 line end
# COMMIT