Presentation is loading. Please wait.

Presentation is loading. Please wait.

第六章 shell 程序调试 一. 程序执行状态跟踪 程序: -n 读取命令, 但不执行. 主要用于跟踪程序流程是

Similar presentations


Presentation on theme: "第六章 shell 程序调试 一. 程序执行状态跟踪 程序: -n 读取命令, 但不执行. 主要用于跟踪程序流程是"— Presentation transcript:

1 第六章 shell 程序调试 一. 程序执行状态跟踪 程序: -n 读取命令, 但不执行. 主要用于跟踪程序流程是
一. 程序执行状态跟踪 利用set命令的任选项特定功能来跟踪调试shell 程序: -n 读取命令, 但不执行. 主要用于跟踪程序流程是 否在特定条件下执行到这里(断点设置). -v 在执行shell程序的同时, 把从shell程序中读入的 行显示出来. 用于跟踪shell程序的执行流程. -x 显示正在执行的语句及其变量的值. 用于动态 跟踪变量的值.

2 实例1. 程序运行语法为: prog_v [arg1 arg2 ….]
$ cat prog_v set -v if [ $# -eq 2 ] then echo "correct argument number: $#" else echo "wrong argument number: $#" fi $ prog_v aa bb correct argument number: 2 显示读入的各语句 程序运行结果

3 如将程序第一行改为set -vx 将会什么结果?
实例2: 程序运行语法为: prog_x [arg1 arg2 ….] $ cat prog_x set -x if [ $# -eq 2 ] then echo "correct argument number: $#" else echo "wrong argument number: $#" fi $ prog_v aa bb cc ++ '[' 3 -eq 2 ']' ++ echo 'wrong argument number: 3' wrong argument number: 3 执行(而非读入)的语句及变量的值 程序的执行结果 如将程序第一行改为set -vx 将会什么结果?

4 在报警及时性和减轻系统负载之间合理设定间隔时间
二. 运行日志文件的建立和跟踪 利用运行日志文件记录和跟踪程序的中间状态和结果,例如: run_log=$HOME/log/prog1.log echo "[程序名] Entry Time:`date`" >> $run_log …… echo " [参数名:参数值]" >> $run_log command > data_file 2>> $run_log echo "Exit Time:`date`" >> $run_log 注意:状态信息是追加, 而不是覆盖日志文件. 可由另一程序(进程) 定时跟踪监测日志文件, 检测到某些关键字后报警, 例如: while true do status=`grep error $run_log` If [ -n "$status" ] Then 报警处理 fi sleep 300 done 或是warning等关键字 闪烁字符、反白显示、喇叭响铃等 在报警及时性和减轻系统负载之间合理设定间隔时间

5 三. 语句组的应用规则和限制 在shell程序中,常常使用包含多条语句的语句 组来完成某一特定的功能,由此来优化程序的结构。
三. 语句组的应用规则和限制 在shell程序中,常常使用包含多条语句的语句 组来完成某一特定的功能,由此来优化程序的结构。 语句组作为相对独立的程序模块,可被当作单条命 令或函数来应用。 需要特别注意的是,命令组的标准输出被重新 定向时,命令组中的所有命令的输出都将被重新定 向。 命令组的标准输入被重新定向时, 则根据命令 组中各命令的先后次序, 输入数据先满足第一个需 要输入数据的命令, 剩下的数据再满足第二个要输 入数据的命令, …依此类推.

6 语句组格式一: (command1; command2; … commandn) > outfile 例如:
(echo "current dir is `pwd`" echo "files in the dir:" ls –l ) > outfile 文件outfile中的内容为: current dir is /home/teacher/zhanglan files in the dir: total 5 drwxr-xr–x 2 zl teacher Jul :46 src -rw-r- -r zl teacher Sep 05 12:35 file1 -rwxr-xr-x 1 zl teacher Sep :08 tst9 三条命令的输出都被重新定向到了文件outfile中.

7 语句组格式二: (command1; command2; … commandn) < datafile 或者:
command | (command1; command2; …. commandn) 例如: ps -e | (read title; echo $title; grep student6) . read命令先读入ps命令输出结果的第一行 . grep命令从ps命令输出结果的第二行开始查找包含字符 串student6的行

8 语句格式三: while command1 command2 … commandn 语句组的运行结果作为条件表达式的值 do 循环体命令表
done 每次循环时, 都要执行一遍command1至commandn, 并根据 commandn的执行结果(退出状态)来作为整个while循环的 条件测试值, 判断是否进入下一轮循环. 语句组的运行结果作为条件表达式的值

9 例如: num=1 while pwd date ls –l | sort > filelist test $num -ne 6 do
……. num=`expr $num ` done 虽然每次循环时都要执行pwd、date和 ls 命令,但只有test 命令的执行结果才能决定是否进入下一轮循环.

10 datafile是整个while循环(语句组)的输入文件, 而不是语句done的输入文件.
语句格式四: while 条件表达式 do 循环体命令表 done < datafile 例如: i=1 while read id name component echo "$i UID: $id name: $name" i=`expr $i + 1` done < userlist 从userlist文件中每读入一行, 就执行一次循环体, 直到读到 userlist的文件尾. datafile是整个while循环(语句组)的输入文件, 而不是语句done的输入文件.

11 谢 谢 2019年4月7日


Download ppt "第六章 shell 程序调试 一. 程序执行状态跟踪 程序: -n 读取命令, 但不执行. 主要用于跟踪程序流程是"

Similar presentations


Ads by Google