shell脚本的多种执⾏⽅法及调试⽅法
执⾏脚本:脚本⽂件名称为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⽽来)。就是顺序的执⾏⽂件⾥的命令⽽已。
source example.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 重新启动
shell代码
Finish 执⾏到程序最后
cond n expr 条件断点
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论