调试 shell script 方法

[email protected]:~$ cat b.sh#!/bin/bash
dir=`pwd`
dir=$dir‘/‘
for f in `ls *.png`
do

  echo $dir$f
done

看每一行代码的执行:

[email protected]:~$ bash -x b.sh
++ pwd
+ dir=/home/wade
+ dir=/home/wade/
++ ls chrome_1407299385726.png chrome_1427299385726.png
+ for f in ‘`ls *.png`‘
+ echo /home/wade/chrome_1407299385726.png
/home/wade/chrome_1407299385726.png
+ for f in ‘`ls *.png`‘
+ echo /home/wade/chrome_1427299385726.png

进一步,看具体执行的代码与行号对应:

[email protected]:~$ export PS4=‘+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}: ‘
[email protected]:~$ bash -x b.sh
++b.sh:2:: pwd
+b.sh:2:: dir=/home/wade
+b.sh:3:: dir=/home/wade/
++b.sh:8:: ls chrome_1407299385726.png chrome_1427299385726.png
+b.sh:4:: for f in ‘`ls *.png`‘
+b.sh:7:: echo /home/wade/chrome_1407299385726.png
/home/wade/chrome_1407299385726.png
+b.sh:4:: for f in ‘`ls *.png`‘
+b.sh:7:: echo /home/wade/chrome_1427299385726.png

指定脚本的部分去跑详细的行号,其余的忽略:

[email protected]:~$ cat b.sh
#!/bin/bash
dir=`pwd`
dir=$dir‘/‘
#this line above won‘t log out
set -x
for f in `ls *.png`
do

  echo $dir$f
done
set +x
#the follow line won‘t log out
echo ‘end‘
abc=‘new var‘

运行输出:

[email protected]:~$ ./b.sh
++./b.sh:10:: ls chrome_1407299385726.png chrome_1427299385726.png
+./b.sh:6:: for f in ‘`ls *.png`‘
+./b.sh:9:: echo /home/wade/chrome_1407299385726.png
/home/wade/chrome_1407299385726.png
+./b.sh:6:: for f in ‘`ls *.png`‘
+./b.sh:9:: echo /home/wade/chrome_1427299385726.png
/home/wade/chrome_1427299385726.png
+./b.sh:11:: set +x
end

调试 shell script 方法,布布扣,bubuko.com

时间: 2024-12-20 01:15:59

调试 shell script 方法的相关文章

shell script追踪和调试

1. shell script调试 使用sh命令,检查shell的语法,追踪执行步骤. sh [-nvx] script.sh -n : 不执行script,仅检查是否有语法问题 -v : 执行前将script打印出来 -x : 将使用到的script打印出来 2. 检查语法错误 使用sh -n, 如果有语法错误,会提示出来. [[email protected] sh]$ sh -n for.sh for.sh: line 7: syntax error near unexpected tok

学习shell script

如果你的想要管理好你的主机,那么就要好好学习自动管理系统的有效工具--hell script!基本上,shell script有点像早期的批处理文件,即将很多命令整合起来一次执行,但是shell script拥有更强大的功能,它可以进行类似程序的编写,并且不需要经过编译就能够执行,非常方便我们对系统进行管理. 今天我们主要通过对一些shell script的习题来加深对脚本知识的学习. 习题1:对成绩进行判断,要求输入一个正整数,以60分,85分为界输出不同的评语. #!/bin/bash #

bash shell学习-shell script基础 (笔记)

A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux Shell脚本攻略     Linux程序设计(第四版) 一.什么是shell script 1.什么是shell script 简单来说,shell script(程序化脚本)是利用shell功能所写的一个“程序”,它拥有自己的语法特性 2.为什么要学shell script 对于一个初学者来说,我觉得就那

執行shell script與subshell

兩種方法 喚起新shell再執行shell scripts 在目前shell執行shell scripts 喚起另一個shell來執行的scripts在scripts檔頭最前面前要加 #! /bin/sh 第一種方法是在shell script 文字檔前指出shell scripts解讀的程式在那(也就是 我們的shell)然後把文字檔的執行權限打開,照一般執行可執行檔方式執行或者叫 一個shell來解釋文字檔test.sh. $ test.sh $ /bin/sh test.sh $ ( .

跟鸟哥学Linux之——shell script

从程序员的角度来看,Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作.在系统管理等领域,Shell编程起着不可忽视的作用.前期我对shell编程做了一个初步的认识,现总结如下: 思维导图: 知识分为了两部分: 基本知识: 在基本知识中我将其分为了:执行方法.运算式.变量和判断式四部分.1.执行方法就是在Linux中shell文件执行的命令,用的多了自然会没有问题.2

第十三章、学习 Shell Scripts 简单的 shell script 练习

简单的 shell script 练习 简单范例 对谈式脚本:变量内容由使用者决定 [[email protected] scripts]# vi sh02.sh #!/bin/bash # Program: # User inputs his first name and last name. Program shows his full name. # History: # 2005/08/23 VBird First release PATH=/bin:/sbin:/usr/bin:/us

《学习bash》笔记--调试shell程序

在shell中,最简单的调试助手时输出语句echo,可以通过把许多echo语句放到代码中进行调试,但必须花费足够的时间以定位 要查看的信息.可能必须通过许多的输出才能发现要查找的信息. 1.set选项 最基本的时set -o命令选项,当运行脚本时,这些选项可以用在命令行上,如下表所示: set -o选项      命令行选项      行为 noexec            -n                     不运行命令,值检查语法错误 verbose           -v  

Shell Script 中 "$()" ," ${}" Learning

shell中$(( )) 与 $( ) 还有${ }的区别 http://blog.chinaunix.net/uid-14351756-id-2820651.html $( ) 与 ` ` (反引号) 在 bash shell 中,$( ) 与 ` ` (反引号) 都是用来做命令替换用(command substitution)的. 所谓的命令替换与我们第五章学过的变量替换差不多,都是用来重组命令行: * 完成引号里的命令行,然后将其结果替换出来,再重组命令行. 例如: [code]$ ech

Shell Script 学习 I

Shell Script I Shell有两种执行命令的方式: 交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条. 批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令 Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把它们称作一种Shell ,bash是Linux标准默认的shell, sh 是Unix 标准默认的s