Shell脚本调试方法 Shell脚本执行的过程
2016-09-09 00:00
691 查看
Shell脚本调试方法 Shell脚本执行的过程
分类:-[小西南]-(8434) (0)
1Shell脚本调试方法
Shell提供了一些用于调试脚本的选项:-n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误。
-v,一边执行脚本,一边将执行过的脚本命令打印到标准错误输出。
-x,提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。
使用这些选项有三种方法。比如现有如下已获取运行权限脚本文件function.sh:
#!/bin/sh foo(){ echo "Shell bash function is called"; } echo"---start--" foo echo"---end--" |
(1) 命令行提供参数
将以上脚本第二行的“;”去掉。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 “}”) |
(2) 脚本开头提供参数
#! /bin/sh -x |
(3) 脚本中用set命令启用或禁用调试选项
#! /bin/sh foo() { echo "Shell bash function iscalled"; } echo "---start--" set -v foo set +v echo"---end--" |
---start— foo Shell bash functionis called set +v ---end |
2 Shell执行脚本过程
(1) 执行交互式命令
用户输入一条命,Shell就解释执行一条,这种方式称为交互式。用户在命令行输入命令后,一般情况下Shell会fork并exec该命令(进程控制 [fork() exec() wait() waitpid()])。但是Shell的内建命令例外,执行内建命令相当于调用Shell进程中的一个函数,并不创建新的进程。Shell的内建命令用man bash-builtins命令查看。(2) 执行脚本文件
Shell会fork一个子进程并调用exec执行脚本文件,exec系统用它的另外一种机制来执行文本文件:如果要执行的是一个文本文件,并且第一行用Shebang(#! /bin/sh)指定了解释器,则用解释器程序的代码段替换当前进程,并且从解释器的_start开始执行,而这个脚本文本文件被当作命令行参数传给解释器。因此,执行脚本文件相当于执行程序:/bin/sh 脚本文件。所以,可以在Shell下直接用“/bin/sh 脚本文件”(指脚本文件内容的第一句即脚本解释器)的方式执行脚本文件,这种方式执行脚本文件还不需要脚本文件的运行权限。
如现有以下脚本:
#!/bin/sh cd.. ls |
则Shell执行此脚本的过程如下:
交互Shell(bash)fork/exec一个子Shell(sh)用于执行脚本,父进程bash等待子进程sh终止。
sh读取脚本中的cd..命令,调用相应的函数执行内建命令,改变当前工作目录为上一级目录。
sh读取脚本中的ls命令,fork/exec这个程序,列出当前工作目录下的文件,sh等待ls终止。
ls终止后,sh继续执行,读到脚本文件末尾,sh终止。
sh终止后,bash继续执行,打印提示符等待用户输入。
[2014.8.11 - 17.17]
LCNote Over.
相关文章推荐
- Shell脚本调试方法 Shell脚本执行的过程
- shell脚本的多种执行方法及调试方法
- 执行shell脚本的几种方法
- shell脚本里面一个很经典的调试方法(原创)
- 存储过程使用shell脚本执行sql文件
- 用内置变量调试shell脚本的方法
- Java后台执行Shell脚本, Java方法不用等待Shell程序执行完成并保证关掉Java程序Shell脚本正常运行
- shell脚本中执行mysql 语句的方法
- 让Shell脚本自动执行的方法
- shell脚本调试方法
- linux下shell脚本执行方法及exec和source命令
- shell脚本调试方法
- 脚本调试与存储过程调试的方法 加入baidu搜索
- 用shell的-n -x 执行选项调试shell脚本
- android中执行shell脚本或者需要root权限代码的方法
- shell脚本调试方法
- shell脚本执行方法及差异
- shell脚本直接执行没有问题,crontab定时执行失败的解决方法
- sh文件在windows下修改后无法执行的解决方法以及shell脚本中含中文乱码
- 执行shell脚本的多种方法及重要区别---摘取自“老男孩linux运维培训”(自己通过视频整理)