shell脚本调试

一、脚本的追踪与调试

sh [-nvx] scripts.sh
-n: 不要执行脚本,仅查询语法问题
-v: 在执行脚本前,先将脚本的内容输出到屏幕上
-x: 将脚本的执行过程全部列出来(代码是什么,然后输出什么,写的相当清楚)

1.1 调试脚本 move_more_10k.sh

脚本内容
在这里插入图片描述
  脚本所表达的意思很明显,就是将目录/home/songbw/QQ_xiao下,文件大小大于10k的文件复制到 /home/songbw/10_topic下,一开始我将此脚本放在/home/songbw/shell/10_problem/ 目录下,然后去执行这个脚本,一直出现类似:
cp: 无法 stat “serverApp.o” : 没有那个文件或目录的错误
  我好傻,一直以为是脚本不能够识别目录 /home/songbw/10_topic,后来我用sh -x move_more_10k.sh进行调试,它会具体显示出某一条代码和其执行结果,如下:
在这里插入图片描述

我才意识到脚本不能识别的是serverApp.o,细想想是这样的,因为脚本是在/home/songbw/shell/10_problem/下面,好比是在这下面执行命令 cp serverApp.o /home/songbw/10_topic,那么它肯定识别不了 serverApp.o,因为下面根本就没有这个文件,顿时我意识到了这个问题,把脚本放在了 /home/songbw/QQ_xiao/ 下面,立刻就执行成功了。
所以以后一定要注意:
脚本所在的目录,看当前目录下有没有相应的文件,能不能识别。

1.2 调试脚本 changedir.sh

脚本内容:
在这里插入图片描述
  脚本的意思非常简单,就是将当前目录切换到目录,问题是,当执行这个脚本的时候,没有任何的变化,并不能切换到我想切换的目录,原因如下:
我是以 ./changedir.sh 的方式执行的,这样执行的话,终端会产生一个子shell,子shell 去执行我的脚本,在子shell 中已经切换了目录,但是子shell 一旦执行完,马上退出,子shell 中的变量和操作全部都收回,回到终端,根本就看不到,这个过程的变化

  还记得在”shell 脚本笔记”中,执行脚本的b方式中所述,”当执行一个脚本文件时,shell会产生一个子shell(即一个子进程)去执行脚本文件中的命令。因此,脚本文件中的变量值不能传递到当前shell(即父shell)。所以为了使脚本文件中的变量值传递到当前shell,必须在脚本文件名前加“source”或“.”命令,即source script-file 或
. Script-file”,所以当我输入命令source changedir.sh,立刻就切换了目录。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值