熊貓 发表于 2016-9-8 22:53

大神帮忙改一下脚本

K2用的老毛子华硕固件,看到有大神分享了个自动重拨脚本
链接:http://www.right.com.cn/forum/fo ... A%B6%C8%B8%FC%D0%C2

但是我想精确到第二段IP,比如:223.121.XX.XX   精确到223.121这个IP段,麻烦兄弟们帮忙改一下!


#!/bin/sh
j='0'
for i in `seq 50`;
#做50次拨号循环,50次如果都没拨上也停止
do
IP=$(ifconfig pppoe-wan 2> /dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2)
#获取wan口ip
IPP=${IP:0:2}
#取wan口IP前二位
echo "Current IP:"
echo $IP

if [ "$IPP" = "0." ]; then
#如果没有获取到IP,延时2秒
echo "please wait 2 second"
sleep 2

elif [ "$IPP" = "" ]; then
#意外情况,等待2秒
echo "error,please wait 2 second"
sleep 2
j=`expr $j + 1`;
echo "error times :"
echo $j
if [ "$j" -ge "5" ]&&[ "$IPP" = "" ]; then
ifdown wan | ifup wan
sleep 2
else
continue
fi

elif [ "$IPP" = "10" ]; then
#如果IP开头是10的话,重拨
echo "Intranet IP:"
echo $IP
ifdown wan | ifup wan
sleep 2


else
#保留IP,跳出循环
echo "Public IP:"
echo $IP
break


fi
done

chensksk 发表于 2016-9-8 22:53

本帖最后由 chensksk 于 2016-9-9 11:29 编辑

熊貓 发表于 2016-9-9 00:50
主要是我这里有的IP段玩LOL电一延迟低比较舒服。。不过感觉不对啊,这样拨到我需要的IP段,就重拨了啊。...
#!/bin/sh
j='0'
for i in `seq 50`;
#做50次拨号循环,50次如果都没拨上也停止
do
IPP=$(ifconfig pppoe-wan 2> /dev/null |grep -ioE 'addr:()+'|sed -n '1p'|awk -F '[:.]' '{print $2"."$3}')
#获取wan口ip前二位
IP=${IPP%%.*}
#保留wan口ip第一位

if [ "$IPP" = "0.0" ]; then
      #如果没有获取到IP,延时2秒
      echo "please wait 2 second"
      sleep 2

elif [ "$IPP" = "" ]; then
      #意外情况,等待2秒
      echo "error,please wait 2 second"
      sleep 2

      j=`expr $j + 1`;
      echo "error times :"
      echo $j

      if [ "$j" -ge "5" ]&&[ "$IPP" = "" ]; then
                ifdown wan | ifup wan
                sleep 2
      fi

#判断ip前两位,为目标IP时跳出循环,多个IP添加 或 条件“ ||[ "$IPP" = "XX.XX" ] ”
elif [ "$IPP" = "10.10" ]||[ "$IPP" = "172.10" ]; then
      #保留IP,跳出循环
      echo "Public IP:"
      echo $IPP
      break

else
      #非目标IP,重拨
      echo "Intranet IP:"
      echo $IPP
      ifdown wan | ifup wan
      sleep 2

fi
done

chensksk 发表于 2016-9-8 23:53

你第7行跟第9行说截取ip前两位,然后后面的if条件全是ip前一位的,结果就是直接执行最后else保留IP,跳出循环的操作吧:L

熊貓 发表于 2016-9-9 00:22

chensksk 发表于 2016-9-8 23:53
你第7行跟第9行说截取ip前两位,然后后面的if条件全是ip前一位的,结果就是直接执行最后else保留IP,跳出循 ...

这个是看到别人发的脚本,他这个好像只判断第一段IP,我想判断前两段IP。兄弟你能帮我改一下吗?

chensksk 发表于 2016-9-9 00:30

本帖最后由 chensksk 于 2016-9-9 00:35 编辑

熊貓 发表于 2016-9-9 00:22
这个是看到别人发的脚本,他这个好像只判断第一段IP,我想判断前两段IP。兄弟你能帮我改一下吗?
#!/bin/sh
j='0'
for i in `seq 50`;
#做50次拨号循环,50次如果都没拨上也停止
do
IPP=$(ifconfig pppoe-wan 2> /dev/null |grep -ioE 'addr:()+'|sed -n '1p'|awk -F '[:.]' '{print $2}')
#获取wan口ip前二位
IP=${IPP%%.*}
#保留wan口ip第一位

if [ "$IPP" = "0.0" ]; then
      #如果没有获取到IP,延时2秒
      echo "please wait 2 second"
      sleep 2

elif [ "$IPP" = "" ]; then
      #意外情况,等待2秒
      echo "error,please wait 2 second"
      sleep 2

      j=`expr $j + 1`;
      echo "error times :"
      echo $j

      if [ "$j" -ge "5" ]&&[ "$IPP" = "" ]; then
                ifdown wan | ifup wan
                sleep 2
      fi

#判断ip第一位,如果需要判断两位,将 [ "$IP" = "10" ] 换成 [ "$IPP" = "10.??" ],其中 ?? 换成对应数字
elif [ "$IP" = "10" ]; then
      #如果IP开头是10的话,重拨
      echo "Intranet IP:"
      echo $IP
      ifdown wan | ifup wan
      sleep 2

else
      #保留IP,跳出循环
      echo "Public IP:"
      echo $IP
      break

fi
done

主要修改31-36行,不过你判断2位没啥意义吧

熊貓 发表于 2016-9-9 00:50

本帖最后由 熊貓 于 2016-9-9 00:53 编辑

chensksk 发表于 2016-9-9 00:30
主要修改31-36行,不过你判断2位没啥意义吧
主要是我这里有的IP段玩LOL电一延迟低比较舒服。。不过感觉不对啊,这样拨到我需要的IP段,就重拨了啊。 怎样改能让拨到需要的IP段停止,没拨到才继续循环呢?

熊貓 发表于 2016-9-9 01:00

chensksk 发表于 2016-9-9 00:30
主要修改31-36行,不过你判断2位没啥意义吧

[ "$IPP" -ne "223.121" ]

改成这样对吗?

熊貓 发表于 2016-9-9 01:07

chensksk 发表于 2016-9-9 01:01


谢谢兄弟,你真是热心肠啊~ 明天我试一下,有问题再请教你。

chensksk 发表于 2016-9-9 11:31

熊貓 发表于 2016-9-9 01:07
谢谢兄弟,你真是热心肠啊~ 明天我试一下,有问题再请教你。

昨晚7楼的第6行忘了该,编辑过了

熊貓 发表于 2016-9-9 20:40

chensksk 发表于 2016-9-9 11:31
昨晚7楼的第6行忘了该,编辑过了

回家了,最近测试不了这个脚本了。过段时间测试有问题请教你,兄弟。给你最佳~~谢谢你的帮忙!
页: [1]
查看完整版本: 大神帮忙改一下脚本