linuxshell语法检查或者查看shell脚本执⾏过程的参数介绍及两
种使⽤⽅法
shell语法检查或者查看shell脚本执⾏过程的参数介绍及两种使⽤⽅法
⼀、常⽤参数概述:
set -x 与 set +x
在liunx脚本中可⽤set -x就可有详细的⽇志输出,省的⽼是要echo了
⽤于脚本调试。set是把它下⾯的命令打印到屏幕
set -u 是显⽰语法未定义的变量,却使⽤了
set -x 是开启
set +x是关闭
set -o是查看 (xtrace),
set 去追踪⼀段代码的显⽰情况。
执⾏set -x后,对整个脚本有效。
如果针对部分代码有效,需要使⽤set +x,显⽰指定恢复;
例⼦:
[hd@data10 ~/work/test_shell]$ ls -l /bin/bash
+ ls --color=tty -l /bin/bash
-rwxr-xr-x 1 root root 722684 Jul 12 2006 /bin/bash
针对⼀部分script,可以选择 set -x 和 set +x配套使⽤。⽐如在⼀个脚本⾥:
set -x # activate debugging from here
w
set +x # stop debugging from here
linux循环执行命令脚本
⼆、其他常⽤的shell参数命令
set指令能设置所使⽤shell的执⾏⽅式,可依照不同的需求来做设置
-a 标⽰已修改的变量,以供输出⾄环境变量。
-b 使被中⽌的后台程序⽴刻回报执⾏状态。
-C 转向所产⽣的⽂件⽆法覆盖已存在的⽂件。
-d Shell预设会⽤杂凑表记忆使⽤过的指令,以加速指令的执⾏。使⽤-d参数可取消。
-e 若指令传回值不等于0,则⽴即退出shell。
-f 取消使⽤通配符。
-h ⾃动记录函数的所在位置。
-H Shell 可利⽤"!"加<;指令编号>的⽅式来执⾏history中记录的指令。
-k 指令所给的参数都会被视为此指令的环境变量。
-l 记录for循环的变量名称。
-m 使⽤监视模式。
-n 只读取指令,⽽不实际执⾏。
-p 启动优先顺序模式。
-P 启动-P参数后,执⾏指令时,会以实际的⽂件或⽬录来取代符号连接。
-t 执⾏完随后的指令,即退出shell。
-u 当执⾏时使⽤到未定义过的变量,则显⽰错误信息。
-v 显⽰shell所读取的输⼊值。
-x 执⾏指令后,会先显⽰该指令及所下的参数。
+<;参数> 取消某个set曾启动的参数。
set -x 作⽤
⼀句话总结:显⽰脚本运⾏是的冗余输出,在set命令之后执⾏的每⼀条命令以及加载命令⾏中的任何参数都会显⽰出来,每⼀⾏都会加上加号(+),提⽰它是跟踪输出的标识。
set -o 查看
$ set -o
allexport off
braceexpand on
emacs on
errexit off
……
ignoreeof off
interactive-comments on
keyword off
monitor on
……
verbose off
vi off
xtrace off
三、上述的常⽤的u参数和x参数使⽤两种⽅式⽰例:
1、在shell脚本指定set -u参数,检测特定代码块⾥⾯未定义的变量错误:[hd@data10 ~/work/test_shell]$ more u_test.sh
if ! test ${thedate}; then
thedate=$(/bin/date -d-1day "+%Y%m%d")
fi
echo $thedate
cwd=$(cd $(dirname $0); pwd)
logdir="${cwd}/logdir"
non_var1="$logdir11/yzzzz_data_merge/*"
echo "non_var1",$non_var1
jobname="yyz_data_merge_${thedate}"
echo ${jobname}
set -u
# 下⾯⼀⾏是未定义的变量
non_var2="yzzzz_data_merge/${thedateaaa}*/*"
echo "non_var2",$non_var2
set +u
echo $thedate
[hd@data10 ~/work/test_shell]$ bash ./u_test.sh 20190916
non_var1,/yzzzz_data_merge/*
yyz_data_merge_20190916
./uu_test.sh: line 15: thedateaaa: unbound variable [hd@data10 ~/work/test_shell]$ more test.sh
if ! test ${thedate}; then
thedate=$(/bin/date -d-1day "+%Y%m%d")
fi
echo $thedate
cwd=$(cd $(dirname $0); pwd)
logdir="${cwd}/logdir"
jobname="yyz_data_merge_${thedate}"
echo ${jobname}
# 下⾯⼀⾏是未定义的变量
non_var="yzzzz_data_merge/${thedateaaa}*/*"
echo "non_var",$non_var
echo $thedate
[hd@data10 ~/work/test_shell]$ sh test.sh
20190916
yyz_data_merge_20190916
non_var,yzzzz_data_merge/*/*
20190916
[hd@data10 ~/work/test_shell]$ sh -u test.sh
test.sh: line 2: $1: unbound variable
2、在shell脚本指定set -x参数,显⽰shell代码执⾏过程的⽰例:[hd@data10 ~/work/test_shell]$ sh -x test.sh
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论