shell脚本的多种执行方法及调试方法

来源:互联网 发布:js get和post的区别 编辑:程序博客网 时间:2024/05/21 17:05

执行脚本:脚本文件名称为exapmle.sh,前目录为/data/shell,用chmod +x example.sh给该脚本附加执行权限

方法1:cd到当前目录,用./example.sh执行,此处必须有点.,表示的是在当前的工作目录下执行example.sh。如果不加上./,bash可能会响应找到不到example.sh的错误信息。因为目前的工作目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。

方法2:以绝对路径的方式去执行bash shell脚本:/data/shell/example.sh

方法3:直接使用bash 或sh 来执行bash shell脚本:

cd到当前目录下,用bash example.sh或者sh example.sh执行,此时该脚本可以无执行权限,

注:bash、sh在执行文件时的不同,是分别用自己的shell来跑文件。 sh使用“-n”选项进行shell脚本的语法检查,使用“-x”选项实现shell脚本逐条语句的跟踪,可以巧妙地利用shell的内置变量增强“-x”选项的输出信息等。

若是以方法3的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法3是将example.sh作为参数传给sh(bash)命令来执行的。这时不是example.sh自己来执行,而是被人家调用执行,所以不要执行权限。也不用指定bash路径

方法4: source example.sh 或者.example.sh

此时该脚本可以无执行权限

source(或点)命令通常用于重新执行刚修改的初始化文档。 
source命令(从 C Shell 而来)是bash shell的内置命令。 
点命令,就是个点符号,(从Bourne Shell而来)。就是顺序的执行文件里的命令而已。

sourceexample.sh与 sh example.sh及./example.sh执行脚本的区别在那里呢?
1.当shell脚本具有可执行权限时,用sh example.sh与./example.sh执行脚本是没有区别得。./example.sh是因为当前目录没有在PATH中,所有"."是用来表示当前目录的。
2.sh example.sh重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
3.source example.sh:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

执行脚本的时候,要传的参数跟在脚本文件名后边,用空格隔开,且多个参数之间也是用空格隔开,如要给example.sh传递两个参数则如下:

chmod +x example.sh

./example.sh param1 param2

shell脚本的调试

如何调试Shell脚本
1) 检查语法错误:
一般来说我们可以通过修改shell脚本的源代码,令其输出相关的调试信息来定位错误,那有没有不修改源代码来调试shell脚本的方法呢?答案就是使用shell的执行选,下面是一些常用选项的用法:
-n 只读取shell脚本,但不实际执行
-x 进入跟踪方式,显示所执行的每一条命令
-c "string" 从strings中读取命令

“-n”可用于测试shell脚本是否存在语法错误,但不会实际执行命令。在shell脚本编写完成之后,实际执行之前,首先使用“-n”选项来测试脚本是否存在语法错误是一个很好的习惯。因为某些shell脚本在执行时会对系统环境产生影响,比如生成或移动文件等,如果在实际执行才发现语法错误,您不得不手工做一些系统环境的恢复工作才能继续测试这个脚本。

“-c”选项使shell解释器从一个字符串中而不是从一个文件中读取并执行shell命令。当需要临时测试一小段脚本的执行结果时,可以使用这个选项,如下所示:
sh -c 'a=1;b=2;let c=$a+$b;echo "c=$c"'

"-x"选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来,并且在行首显示一个"+"号。 "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。 “-x”选项使用起来简单方便,可以轻松对付大多数的shell调试任务,应把其当作首选的调试手段。

2) 调试工具-bashdb
使用shell调试器bashdb,这是一个类似于GDB的调试工具,可以完成对shell脚本的断点设置,单步执行,变量观察等许多功能。

使用bashdb进行debug的常用命令
1.列出代码和查询代码类:
l   列出当前行以下的10行
-   列出正在执行的代码行的前面10行
.   回到正在执行的代码行
w  列出正在执行的代码行前后的代码
/pat/  向后搜索pat
?pat?向前搜索pat

2.Debug控制类:
h  帮助
help 命令  得到命令的具体信息
q  退出bashdb
x 算数表达式  计算算数表达式的值,并显示出来
!!空格Shell命令 参数  执行shell命令
使用bashdb进行debug的常用命令(cont.)
控制脚本执行类:
n   执行下一条语句,遇到函数,不进入函数里面执行,将函数当作黑盒
s n  单步执行n次,遇到函数进入函数里面
b 行号n  在行号n处设置断点
del 行号n 撤销行号n处的断点
c 行号n 一直执行到行号n处
R  重新启动
Finish 执行到程序最后
cond n expr 条件断点

 调试方法转载出处:http://www.douban.com/note/161255051/


0 0
原创粉丝点击