linux shell脚本调试,linux中的shell调试技术

在shell脚本中,通过set -x命令进入调试模式,之后Shell除了输出shell执行的结果外,还会输出每行执行的shell命令。

1 #!/bin/bash

2

3 set -x

4

5 a=1

6 while [[ $a -le 5 ]];

7 do

8 echo $a

9 let "a+=1"

10 done

下面的输出中带加号表示该条语句是Shell执行的命令,不带加号表示该语句是Shell产生的输出。

# bash t.sh

+ a=1

+ [[ 1 -le 5 ]]

+ echo 1

1

+ let a+=1

+ [[ 2 -le 5 ]]

+ echo 2

2

+ let a+=1

+ [[ 3 -le 5 ]]

+ echo 3

3

+ let a+=1

+ [[ 4 -le 5 ]]

+ echo 4

4

+ let a+=1

+ [[ 5 -le 5 ]]

+ echo 5

5

+ let a+=1

+ [[ 6 -le 5 ]]

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

在shell脚本的开头加上set -x后,会调试整个脚本,有时候可能不需要对整个脚本进行调试,只需要调试某个代码块,那么可以用set -x和set +x把需要调试的代码块包围起来即可,如下

1 #!/bin/bash

2

3 set -x

4

5 a=1

6

7 function show(){

8 echo '$a is now =' $1

9 }

10

11 while [[ $a -le 5 ]];

12 do

13 show $a

14 let "a+=1"

15 done

这里set -x加在shell脚本的开头,调试的是整个脚本

# bash t.sh

+ a=1

+ [[ 1 -le 5 ]]

+ show 1

+ echo '$a is now =' 1

$a is now = 1

+ let a+=1

+ [[ 2 -le 5 ]]

+ show 2

+ echo '$a is now =' 2

$a is now = 2

+ let a+=1

+ [[ 3 -le 5 ]]

+ show 3

+ echo '$a is now =' 3

$a is now = 3

+ let a+=1

+ [[ 4 -le 5 ]]

+ show 4

+ echo '$a is now =' 4

$a is now = 4

+ let a+=1

+ [[ 5 -le 5 ]]

+ show 5

+ echo '$a is now =' 5

$a is now = 5

+ let a+=1

+ [[ 6 -le 5 ]]

下面的代码只调试show函数的调用

1 #!/bin/bash

2

3 a=1

4

5 function show(){

6 echo '$a is now =' $1

7 }

8

9 while [[ $a -le 5 ]];

10 do

11 set -x

12 show $a

13 set +x

14 let "a+=1"

15 done

输出如下

# bash t.sh

+ show 1

+ echo '$a is now =' 1

$a is now = 1

+ set +x

+ show 2

+ echo '$a is now =' 2

$a is now = 2

+ set +x

+ show 3

+ echo '$a is now =' 3

$a is now = 3

+ set +x

+ show 4

+ echo '$a is now =' 4

$a is now = 4

+ set +x

+ show 5

+ echo '$a is now =' 5

$a is now = 5

+ set +x

还记得上面说到的,输出的信息前面有一个+,表示这是shell执行的命令,如果有两个+呢?

1 #!/bin/bash

2

3 set -x

4 a=1

5 echo '$a='$a

6 echo `ls`

输出如下,看下面的++ ls

# bash t2.sh

+ a=1

+ echo '$a=1'

$a=1

++ ls

+ echo t2.sh t.sh

t2.sh t.sh

输出信息中的++ ls表示这个是在当前shell中启动的子shell中执行的命令。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值