Shell调试

Shell 调试

   在我们进行Shell编写后,运行后错误,或者想知道执行shell文件过程是怎样的,我们可以运用Shell调试的方法来读取执行过程。

 

   例如,现有一个Shell文件  test.sh

#!/bin/bash
a=(1 2 3 4 5)
for i in ${a[@]} 
do
    echo $i


1 检查语法错误

-n  选项只做语法检查,而不执行脚本。

bash -n test.sh

 

 在检查语法后,发现原shell文件中 有错误,第7行缺失 done

 

现在将这个test.sh 修改为如下:

#!/bin/bash
a=(1 2 3 4 5)
for i in ${a[@]} 
do
  echo $i
done

 

2 启动调试

bash -x test.sh


进入调试模式后,Shell依次执行读入的语句,产生的输出中有的带加号,有的不带,如下。带加号表示该条语句是Shell执行的。不带加号表示该语句是Shell产生的输出。

 


3 中断调试

在调试过程中可以按Ctrl + Z中断调试,观察结果,然后再按f9键继续调试即可。

4 调试代码块

上面的-x选项是调试整个脚本的,如果脚本很大,会很不方便,还有一种方法是调试某一块代码的,如下

set -x
...
code block
...
set +x



这样,只对set -x与set +x之间的代码进行跟踪。

5 调试函数

set -x

Function call

set +x



常见错误诊断

xxx.sh: cannot shift
这种错误一般是参数传递有误,比如没有给参数,或者参数个数少了。因为shell脚本使用shift来获取下一个参数,如果个数不对,shift命令就会失败。

xxx.sh: ^M: not found
^M是Windows上的回车符\r在UNIX上的显示形式。这种情况多半是在Windows上编辑了shell脚本,然后拿到UNIX/Linux上执行。只要将文件中所有的\r删除即可。

tr -d "\r" <oldfile.sh > newfile.sh
或者一个更标准的方法,因为\r的ASCII码是\015,所以可以这样。

tr -d "\015" < oldfile.sh > newfile.sh

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值