忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 359 | 回复: 5

[其他] ======[已解决]shell脚本如何做到上一次执行错误的位置继续执行呢?====== [复制链接]

论坛徽章:
7
操作系统版块每日发帖之星
日期:2015-06-16 22:20:00IT运维版块每日发帖之星
日期:2015-06-17 22:20:00IT运维版块每周发帖之星
日期:2016-01-07 23:04:26操作系统版块每日发帖之星
日期:2016-05-17 06:20:00操作系统版块每日发帖之星
日期:2016-05-21 06:20:00操作系统版块每日发帖之星
日期:2016-07-05 06:20:0015-16赛季CBA联赛之广东
日期:2017-07-13 16:08:03
发表于 2017-07-06 08:13 |显示全部楼层
本帖最后由 奋斗的毛毛虫 于 2017-07-17 09:44 编辑

shell脚本如何做到上一次执行错误的位置继续执行呢?
例如:
一个shell脚本正常执行,遇到人为设定判断“NG”的时候退出脚本,下一次继续执行的时候在“NG”的地方继续重新执行判断成功以后,再往下面的代码,请问Shell脚本这个功能如何实现呢?

谢谢大家的回复!

论坛徽章:
0
发表于 2017-07-06 15:11 |显示全部楼层
本帖最后由 本友会机友会摄友会 于 2017-07-06 15:13 编辑

很简单,脚本每执行一步,都在某输出文件中,记录‘脚步’即可。

伪代码如下:
脚步 = cat  /xxx/脚步.txt

while

switch(脚步)

          1     {运行脚本第1步,如果成功,脚步++,输出脚步}
          2    {运行脚本第2步,如果成功,脚步++,输出脚步}



或者用           多个脚本之间跳转      的方法也行。

论坛徽章:
7
操作系统版块每日发帖之星
日期:2015-06-16 22:20:00IT运维版块每日发帖之星
日期:2015-06-17 22:20:00IT运维版块每周发帖之星
日期:2016-01-07 23:04:26操作系统版块每日发帖之星
日期:2016-05-17 06:20:00操作系统版块每日发帖之星
日期:2016-05-21 06:20:00操作系统版块每日发帖之星
日期:2016-07-05 06:20:0015-16赛季CBA联赛之广东
日期:2017-07-13 16:08:03
发表于 2017-07-06 17:31 |显示全部楼层
本友会机友会摄友会 发表于 2017-07-06 15:11
很简单,脚本每执行一步,都在某输出文件中,记录‘脚步’即可。

伪代码如下:

您好,非常感谢您的回复!

您的方案非常好,可以说的仔细一些吗?比如:

脚步 = cat  /xxx/脚步.txt

这个文件里面编辑内容是什么呢?

论坛徽章:
0
发表于 2017-07-06 18:10 |显示全部楼层
1     比如说你这个脚本有10步,那么就while 循环11次
2    【脚步。txt】中存一个数字。比如1。当然了,对于powershell应该是    【脚步.ps1】 。因为ps不需要txt,ini,ps脚本内,本身可以存数据。存代码。

   

论坛徽章:
7
操作系统版块每日发帖之星
日期:2015-06-16 22:20:00IT运维版块每日发帖之星
日期:2015-06-17 22:20:00IT运维版块每周发帖之星
日期:2016-01-07 23:04:26操作系统版块每日发帖之星
日期:2016-05-17 06:20:00操作系统版块每日发帖之星
日期:2016-05-21 06:20:00操作系统版块每日发帖之星
日期:2016-07-05 06:20:0015-16赛季CBA联赛之广东
日期:2017-07-13 16:08:03
发表于 2017-07-15 08:11 |显示全部楼层
本帖最后由 奋斗的毛毛虫 于 2017-07-15 22:26 编辑
本友会机友会摄友会 发表于 2017-07-06 18:10
1     比如说你这个脚本有10步,那么就while 循环11次
2    【脚步。txt】中存一个数字。比如1。当然了, ...

你好,你说的switch语句我搜索了一下没有找到,从搜索中我觉得你说的switch语句其实就是case语句,对吗?
记录脚本上一次走到哪一步的脚本大概如下,你看是不是这样:

while true
do
      if [ !-f /aa/bb/cc/step.tmp ];then
            echo "1" > /aa/bb/cc/step.tmp
      fi
      step=/aa/bb/cc/step.tmp
      case ${step} in
            1)    if [ ${stup} -eq 1 ];then
                        print("step1")
                        echo "1" > /aa/bb/cc/step.tmp
                  else
                        echo "1" > /aa/bb/cc/step.tmp
                        exit 2

                  fi
                  ;;
            2)    if [ ${stup} -eq 2 ];then
                        print("step2")
                        echo "2" > /aa/bb/cc/step.tmp
                  else
                        echo "1" > /aa/bb/cc/step.tmp
                        exit 2
                  fi
                  ;;
            3)    if [ ${stup} -eq 3 ];then
                        print("step3")
                        echo "3" > /aa/bb/cc/step.tmp
                  else
                        echo "2" > /aa/bb/cc/step.tmp
                        exit 2
                  fi
                  ;;
            4)    if [ ${stup} -eq 4 ];then
                        print("step4")
                        echo "4" > /aa/bb/cc/step.tmp
                        exit 0
                  else
                        echo "3" > /aa/bb/cc/step.tmp
                        exit 2
                  fi
                  ;;
            *)    print("Error")
                  ;;
      esac
done





论坛徽章:
7
操作系统版块每日发帖之星
日期:2015-06-16 22:20:00IT运维版块每日发帖之星
日期:2015-06-17 22:20:00IT运维版块每周发帖之星
日期:2016-01-07 23:04:26操作系统版块每日发帖之星
日期:2016-05-17 06:20:00操作系统版块每日发帖之星
日期:2016-05-21 06:20:00操作系统版块每日发帖之星
日期:2016-07-05 06:20:0015-16赛季CBA联赛之广东
日期:2017-07-13 16:08:03
发表于 2017-07-17 09:43 |显示全部楼层
回复 4# 本友会机友会摄友会


问题已解决。更新参考代码如下:

#!/bin/bash
while true
do
      step_status=`cat /aa/bb/cc/step.tmp`
      if [ ! -f /aa/bb/cc/step.tmp -o "${step_status}" == "Finish" ];then
            echo "1" > /aa/bb/cc/step.tmp
      fi
      step=`cat /aa/bb/cc/step.tmp`
      case ${step} in
            1)    if [ ${step} -eq 1 ];then
                        echo "step1"
                        echo "2" > /aa/bb/cc/step.tmp
                  else
                        echo "1" > /aa/bb/cc/step.tmp
                        exit 2
                  fi
                  ;;
            2)    if [ ${step} -eq 2 ];then
                        echo "step2"
                        echo "3" > /aa/bb/cc/step.tmp
                  else
                        echo "2" > /aa/bb/cc/step.tmp
                        exit 2
                  fi
                  ;;
            3)    if [ ${step} -eq 3 ];then
                        echo "step3"
                        echo "4" > /aa/bb/cc/step.tmp
                  else
                        echo "3" > /aa/bb/cc/step.tmp
                        exit 2
                  fi
                  ;;
            4)    if [ ${step} -eq 4 ];then
                        echo "step4"
                        echo "Finish" > /aa/bb/cc/step.tmp
                        exit 0
                  else
                        echo "4" > /aa/bb/cc/step.tmp
                        exit 2
                  fi
                  ;;
            *)    echo "Error"
                  ;;
      esac
done

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

本版积分规则

  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP