分类:-[小西南]-bash
(8434) (0)函数
Shell提供了一些用于调试脚本的选项:ui
使用这些选项有三种方法。好比现有以下已获取运行权限脚本文件function.sh:spa
#!/bin/sh.net foo(){ echo "Shell bash function is called"; }命令行 echo"---start--"调试 fooblog echo"---end--" |
分别用Shell脚本调试方法来调试。进程
将以上脚本第二行的“;”去掉。ci
sh -n function.sh function.sh: 7: function.sh: Syntax error:end of file unexpected (expecting “}”) sh -v function.sh #! bin/sh
foo() { echo"Shell bash function is called" } echo"---start--" foo echo"---end--" function.sh: 7: function.sh: Syntax error:end of file unexpected (expecting “}”) sh -x function.sh function.sh:7: function.sh: Syntax error: end of file unexpected (expecting “}”) |
#! /bin/sh -x |
只能在脚本开头加入其中一个调试选项。
#! /bin/sh foo() { echo "Shell bash function iscalled"; } echo "---start--" set -v foo set +v echo"---end--" |
set -v和set+v分别表示启用和禁用-x参数,这样能够只对脚本中的某一段进行跟踪调试。./function.sh结果:
---start— foo Shell bash functionis called set +v ---end |
避免几种调试选项混用的状况。
用户输入一条命,Shell就解释执行一条,这种方式称为交互式。用户在命令行输入命令后,通常状况下Shell会fork并exec该命令(进程控制 [fork() exec() wait() waitpid()])。可是Shell的内建命令例外,执行内建命令至关于调用Shell进程中的一个函数,并不建立新的进程。Shell的内建命令用man bash-builtins命令查看。
Shell会fork一个子进程并调用exec执行脚本文件,exec系统用它的另一种机制来执行文本文件:若是要执行的是一个文本文件,而且第一行用Shebang(#! /bin/sh)指定了解释器,则用解释器程序的代码段替换当前进程,而且从解释器的_start开始执行,而这个脚本文本文件被看成命令行参数传给解释器。所以,执行脚本文件至关于执行程序:/bin/sh 脚本文件。
因此,能够在Shell下直接用“/bin/sh 脚本文件”(指脚本文件内容的第一句即脚本解释器)的方式执行脚本文件,这种方式执行脚本文件还不须要脚本文件的运行权限。
如现有如下脚本:
#!/bin/sh cd.. ls |
其中cd是Shell的内建命令,ls不是Shell的内建命令(能够用which ls查看)。
则Shell执行此脚本的过程以下:
[2014.8.11 - 17.17]
LCNote Over.