我有一个 Linux 脚本,它允许我通过 VPN 接口路由一些流量,并通过另一个接口路由其他流量(来自不同的 IP)。这是我的脚本:
echo "ip route del default via 192.168.120.10 dev ppp0;" >> /tmp/firewallscript.sh
echo "ip route add default via 192.168.1.254 dev eth0;" >> /tmp/firewallscript.sh
echo "ip route add table 55 default via 192.168.120.10 dev ppp0;" >> /tmp/firewallscript.sh
echo "iptables -t mangle -I PREROUTING 1 -s 192.168.1.40 -j MARK --set-mark 55;" >> /tmp/firewallscript.sh
echo "iptables -t mangle -I PREROUTING 1 -s 192.168.1.41 -j MARK --set-mark 55;" >> /tmp/firewallscript.sh
echo "iptables -t mangle -I PREROUTING 1 -s 192.168.1.42 -j MARK --set-mark 55;" >> /tmp/firewallscript.sh
echo "ip rule add fwmark 55 table 55;" >> /tmp/firewallscript.sh
因为我的 VPN 的 IP 变化很大,所以我想“参数化”它。因此,不要写这行代码:
echo "ip route del default via 192.168.120.10 dev ppp0;" >> /tmp/firewallscript.sh
我需要写类似这样的内容:
echo "ip route del default via @MyVariableIP dev ppp0;" >> /tmp/firewallscript.sh
其中@MyVariableIP是ppp0的IP地址。所以我的问题是:
- 知道接口是 ppp0 的情况下,如何使用 bash 获取接口 IP 地址?
- 如何修改以前的脚本?
谢谢
答案1
- 在这个脚本的最后,你可以在 $ip_of_ppp0 变量中获取 ppp0 的 ip
将此脚本放在您的脚本之前,并将 @MyVariableIP 替换为 $ip_of_ppp0
n=`ifconfig|grep -B10 'POINTOPOINT' | cut -d " " -f1 ` m=`ifconfig|grep -B8 'POINTOPOINT'|cut -d " " -f12|grep 'addr:1'|cut -d ":" -f2 ` f=`echo $n` l=`echo $m` arr=($f) amm=($l) h=0 for i in "${arr[@]}"; do ip=${amm[$h]} h=`expr $h+1` if [[ "$i" = "ppp0" ]]; then ip_of_ppp0=$ip; fi done echo $ip_of_ppp0;