快乐十分20选8技巧 www.6qljx.cn 在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中执行的命令。

转载请注明:快乐十分20选8技巧 » linux中的shell调试技术

我来说说

(便于我们更好的交流)

有不明白的地方欢迎留言哦~
取消
  • 你反来复去说1+1=2,真痴呆了?你应该讲点其他的吧,譬如,1+1=2,是客观事实还是规律,是真理还是谬误。 2019-05-17
  • 当然,可这免费卡可以转给他人用,而这人并非是享有免费的人[微笑] 2019-05-17
  • 银联商务“银杏大数据”获“金融大数据创新应用优秀成果奖” 2019-05-03
  • 面包屑-热门标签-华商生活 2019-04-23
  • 黄子韬的下颚线简直完美!有棱有角的!能get到黄子韬的帅吗?[色][色][色][色] 2019-04-16
  • 落实学生视力分级管理应抓好考核的“牛鼻子” 2019-04-15
  • 高清:中国男篮抵达洛杉矶 长途飞行队员略显疲惫 2019-04-14
  • 【北京奥吉通国门车型报价】北京奥吉通国门4S店车型价格 2019-04-01
  • 深改组1000天——亚心网专题 2019-03-23
  • 阳泉首次颁布地方实体性法规 两部法规将于7月1日起实施 2019-03-23
  • 人民日报客户端宣传页 2019-03-15
  • 阿不都20+5王哲林14分 红队20分大胜复仇澳联队 2019-03-15
  • 辽宁:电商成为精准扶贫的“利器” 2018-09-14
  • 鄱阳湖花海:文明仍应成为最美风景 2018-09-14
  • 时间放宽了,考核更难了 2018-07-26
  • 247| 280| 27| 507| 524| 169| 702| 961| 895| 804|