找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 2067|回复: 13

来个牛人帮我改一改脚本吧

[复制链接]
写了一个自动获取网页S-S R的脚本,这个网页每12小时改一次参数。虽然可以用,但是存在BUG。求大神帮我改一改。
  1. wget --no-check-certificate -qO nwy.txt http://aaa.com/index.html     #获取网页数据
  2. if [ -f nwy.txt ] ;then                                                     #确定是否下载成功
  3. {
  4. local lport=`cat ywy.txt | grep '"port"'| sed s/[[:space:]]//g | cut -d'=' -f2 | cut -d'>' -f2`    #提取上一次获取的端口
  5. local rport=`cat nwy.txt | grep '"port"'| sed s/[[:space:]]//g | cut -d'=' -f2 | cut -d'>' -f2`   #提取这次获取的端口
  6. }
  7. elif [ $lport != $rport ] ;then                                          #如果两次端口不匹配                 
  8. {
  9. cp -f nwy.txt ywy.txt                                                     #复制新的网页数据替代原网页数据
  10. /bin/sh /root/setuci.sh 2>/dev/null                                 #setuci.sh脚本执行新的设置。
  11. }
  12. else
  13. rm -f nwy.txt                                                                #如果两次端口匹配,证明还没有更改端口和密码,则删除新的网页数据。
  14. fi
复制代码
现在的问题是,假如下载http://aaa.com/index.html失败,也就是不存在nwy.txt的情况下,并不是直接退出脚本,而是执行下面的代码。请大神教我怎么改。
  1. elif [ $lport != $rport ] ;then                                           #如果两次端口不匹配                 
  2. {
  3. cp -f nwy.txt ywy.txt                                                      #复制新的网页数据替代原网页数据
  4. /bin/sh /root/setuci.sh 2>/dev/null                                  #setuci.sh脚本执行新的设置。
  5. }
复制代码


来自手机 | 显示全部楼层
检查md5不对就直接更新不对了吗
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 child9527 于 2019-1-3 18:43 编辑
IDSSC 发表于 2019-1-3 18:39
检查md5不对就直接更新不对了吗

和比对方法无关,比对md5还是要成功下载index.html啊。index.html下载不成功还是会出错啊。
回复

使用道具 举报

本帖最后由 icq 于 2019-1-3 19:41 编辑

我不是程序员,简单写一下看法吧。
1.elif [ "$lport" != "$rport" ] ;then 比较字符串,应该加引号。
2.没看懂为啥要用这条 elif,如果没有 nwy.txt ,然后  lport和rport 都没有赋值;如果有nwy.txt,赋值完lport和rport就啥事都不做了……感觉这几行应该并入if那个条件吧,就是加个 if [ "$lport" != "$rport" ] ;then ***** fi。
3.应该把大括号都去掉。
4.可以不用加 local 这个关键词吧。

简单改了一下,没测试。

  1. wget --no-check-certificate -qO nwy.txt http://aaa.com/index.html #获取网页数据
  2. if [ -f nwy.txt ] ;then #确定是否下载成功
  3.   lport=`cat ywy.txt | grep '"port"'| sed s/[[:space:]]//g | cut -d'=' -f2 | cut -d'>' -f2` #提取上一次获取的端口
  4.   rport=`cat nwy.txt | grep '"port"'| sed s/[[:space:]]//g | cut -d'=' -f2 | cut -d'>' -f2` #提取这次获取的端口
  5.   if [ "$lport" != "$rport" ] ;then #如果两次端口不匹配
  6.     cp -f nwy.txt ywy.txt #复制新的网页数据替代原网页数据
  7.     /bin/sh /root/setuci.sh 2>/dev/null #setuci.sh脚本执行新的设置。
  8.   else
  9.     rm -f nwy.txt #如果两次端口匹配,证明还没有更改端口和密码,则删除新的网页数据。
  10.   fi
  11. fi
复制代码



回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 child9527 于 2019-1-3 20:35 编辑
icq 发表于 2019-1-3 19:32
我不是程序员,简单写一下看法吧。
1.elif [ "$lport" != "$rport" ] ;then 比较字符串,应该加引号。
2. ...

没有nwy.txt,lport也赋值了。rport倒是没赋值。代码我试试。谢谢。
回复

使用道具 举报

本帖最后由 llq_1983 于 2019-1-3 20:43 编辑

支持,搞定了的话能分享下全部操作就好了
回复

使用道具 举报

来自手机 | 显示全部楼层
修改if作用区域
回复

使用道具 举报

来自手机 | 显示全部楼层
还有路径建议改为全路径,判断是否存在文件名还要加引号
回复

使用道具 举报

本帖最后由 505575853 于 2019-1-4 14:07 编辑

wget --no-check-certificate -qO nwy.txt http://aaa.com/index.html
if [ "$?" == "0" ]; then
        if [ -f ywy.txt ] && [ -f nwy.txt ]; then
                local lport=`cat ywy.txt | grep '"port"'| sed s/[[:space:]]//g | cut -d'=' -f2 | cut -d'>' -f2`
                local rport=`cat nwy.txt | grep '"port"'| sed s/[[:space:]]//g | cut -d'=' -f2 | cut -d'>' -f2`
                if [ "$lport" != "$rport" ]; then         
                        cp -f nwy.txt ywy.txt
                        /bin/sh /root/setuci.sh 2>/dev/null
                fi
        else
                touch ywy.txt
        fi
        rm -f nwy.txt
else
        echo 'Waiting for network connection.'
fi

不会shell瞎写的,重新改了下
回复

使用道具 举报

 楼主| | 显示全部楼层
505575853 发表于 2019-1-3 22:35
wget --no-check-certificate -qO nwy.txt http://aaa.com/index.html
if [ "$?" == "0" ]; then
        if [ - ...

哈哈,这个更好。我就这些命令都是一条一条百度查的。就这个还有setuci.sh,两个脚本我写了一个晚上
回复

使用道具 举报

 楼主| | 显示全部楼层
huaxie1988 发表于 2019-1-3 20:50
还有路径建议改为全路径,判断是否存在文件名还要加引号

默认工作目录是/root,所以没有写全路径了。语法我不太懂,所以出错。看了下面505575853大哥的回复,才知道怎么写if的作用区。。。。
回复

使用道具 举报

 楼主| | 显示全部楼层
505575853 发表于 2019-1-3 22:35
wget --no-check-certificate -qO nwy.txt http://aaa.com/index.html
if [ "$?" == "0" ]; then
        if [ - ...

您可以再帮我参考一下setuci.sh吗?虽然现在可以用,但是我感觉不完美。
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 child9527 于 2019-1-4 13:15 编辑
505575853 发表于 2019-1-3 22:35
wget --no-check-certificate -qO nwy.txt http://aaa.com/index.html
if [ "$?" == "0" ] && [ -f nwy. ...

您这段还是有个漏洞,如果不存在ywy.txt那么这段脚本就废了。因为setuci.sh是从ywy.txt里提取参数。参考您的代码,我稍微修改了一下,自认为比较完美了。

wget --no-check-certificate -qO nwy.txt http://aaa.com/index.html
if [ "$?" == "0" ]; then
        if [ -f ywy.txt ] ;then
        local lport=`cat ywy.txt | grep '"port"'| sed s/[[:space:]]//g | cut -d'=' -f2 | cut -d'>' -f2`
        local rport=`cat nwy.txt | grep '"port"'| sed s/[[:space:]]//g | cut -d'=' -f2 | cut -d'>' -f2`
                if [ "$lport" != "$rport" ] ;then
                        date >>time.txt         
                        cp -f nwy.txt ywy.txt
                        /bin/sh /root/setuci.sh 2>/dev/null
                else
                        rm -f nwy.txt
                fi
        else
                touch ywy.txt                 #不存在ywy.txt,创建一个空的ywy.txt。下次执行的时候会被nwy.txt覆盖。                     
        fi
else
echo 'Waiting for network connection'
fi

另外,我不明白为何使用了[ "$?" == "0" ] 还要再使用 [ -f nwy.txt ],如果[ "$?" == "0" ]那么已经可以证明获取网页成功了啊。也就是说不需要判断nwy.txt存不存在了。当然,您这么写肯定有您的道理,我不懂,所以希望得到您的指导。
回复

使用道具 举报

作为一个学软件的  但是我还是看不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-5-12 10:04

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表