shell 脚本调试(使用shell的执行选项)
来源:互联网 发布:软文写作 知乎 编辑:程序博客网 时间:2024/05/22 12:20
-n 只读取shell脚本,但是不实际执行
常用于测试shell是否存在语法错误
-x 进入跟踪方式,显示所执行的每一条命令。
使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来,并且在行首显示一个”+”号
-c “string” 从string中读取命令
使shell解释器从一个字符串中而不是从一个文件中读取并执行shell命令。当需要临时测试一小段脚本的执行结果时,可以使用这个选项,如下所示:
sh -c ‘a=1;b=2;let c=
shell的执行选项除了可以在启动shell时指定外,亦可在脚本中用set命令来指定。 “set -参数”表示启用某选项,”set +参数”表示关闭某选项。有时候我们并不需要在启动时用”-x”选项来跟踪所有的命令行,这时我们可以在脚本中使用set命令,如以下脚本片段所示:
set -x #启动”-x”选项
要跟踪的程序段
set +x #关闭”-x”选项
示例:
以下是一个存在bug的shell脚本的示例,本文将用此脚本来示范如何用“-n”以及增强的“-x”执行选项来调试shell脚本。这个脚本中定义了一个函数isRoot(),用于判断当前用户是不是root用户,如果不是,则中止脚本的执行
$ cat –n exp4.sh#!/bin/bashUID=`id |awk '{print $1}'|cut -f2 -d'='|awk -F '(' '{print $1}'`isRoot(){ if [ "$UID" -ne 0 ] return 1 else return 0 fi}isRootif ["$?" -ne 0 ]then echo "Must be root to run this script" exit 1else echo "welcome root user"fi
首先使用 -n 选项检查语法错误:
$ sh -n exp4.sh + id+ + cut -f2 -d=awk -F ( {print $1}+ awk {print $1}+ UID=1000exp4.sh: 8: exp4.sh: Syntax error: "else" unexpected (expecting "then")
发现一个语法错误,经过检查发现第4行的if 后面少了一个 then。改正之后在执行 sh -n,就没有语法错误了。
然后使用 -x 跟踪脚本
exp4.sh: 15: exp4.sh: [1: not found
经过检查发现 是 [号后面缺少了一个空格,导致[号与紧挨它的变量$?的值1被shell解释器看作了一个整体,并试着把这个整体视为一个命令来执行,故有“[1: command not found”这样的错误提示。只需在[号后面插入一个空格就一切正常了。
- shell 脚本调试(使用shell的执行选项)
- 用shell的-n -x 执行选项调试shell脚本
- Shell脚本的调试选项
- shell脚本的调试(trap、tee、shell选项)
- Shell脚本调试方法 Shell脚本执行的过程
- shell 脚本的执行
- shell脚本调试中打开set选项
- shell脚本调试中打开set选项
- 使用Jsch执行Shell脚本
- 使用Jsch执行Shell脚本
- shell脚本的多种执行方法及调试方法
- 在 Shell 脚本中跟踪调试命令的执行
- 使用getopt命令解析shell脚本的命令行选项
- 使用getopt命令解析shell脚本的命令行选项
- 使用getopt命令解析shell脚本的命令行选项
- (1)Shell 脚本的执行进程
- 【shell】shell脚本的调试方式(一)
- 【shell】shell脚本的调试方式(二)
- 特殊数据成员的初始化
- 分类——LDA、QDA
- JAVA_ 网络编程,写一个可以上传文件的服务器和客户端
- 游戏服务器排行榜的设计
- Android中的“再按一次返回键退出程序”实现
- shell 脚本调试(使用shell的执行选项)
- Android面试
- 码农《二》
- SpringMVC+JQueryMobile开发 data-external-page与JQM机制
- DMA
- Break Standard Weight
- JS特性性能缺陷及JIT的解决方案
- 如何面试一个Android开发者
- Arcpy中用pathon写一个DEM生成等高线再用面裁剪的Toolbox工具