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

二、其他常用的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

参考:https://www.cnblogs.com/qqjue/archive/2012/07/25/2607683.html

三、上述的常用的u参数和x参数使用两种方式示例:

1、在shell脚本指定set -u参数,检测特定代码块里面未定义的变量错误:

[hd@data10 ~/work/test_shell]$ more u_test.sh

#!/bin/bash

thedate=$1

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

#!/bin/bash

thedate=$1

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

+ thedate=

+ test

++ /bin/date -d-1day +%Y%m%d

+ thedate=20190916

+ echo 20190916

20190916

+++ dirname test.sh

++ cd .

++ pwd

+ cwd=/home/hd/work/test_shell

+ logdir=/home/hd/work/test_shell/test_shell/logdir

+ jobname=yyz_data_merge_20190916

+ echo yyz_data_merge_20190916

yyz_data_merge_20190916

+ non_var='yzzzz_data_merge/*/*'

+ echo 'non_var,yzzzz_data_merge/*/*'

non_var,yzzzz_data_merge/*/*

+ echo 20190916

20190916

[hd@data10 ~/work/test_shell]$ sh -v test.sh

#!/bin/bash

thedate=$1

if ! test ${thedate}; then

thedate=$(/bin/date -d-1day "+%Y%m%d")

fi

/bin/date -d-1day "+%Y%m%d")

/bin/date -d-1day "+%Y%m%d"

echo $thedate

20190916

cwd=$(cd $(dirname $0); pwd)

cd $(dirname $0); pwd)

cd $(dirname $0); pwd

dirname $0)

dirname $0

logdir="${cwd}/logdir"

jobname="yyz_data_merge_${thedate}"

echo ${jobname}

yyz_data_merge_20190916

non_var="yzzzz_data_merge/${thedateaaa}*/*"

echo "non_var",$non_var

non_var,yzzzz_data_merge/*/*

echo $thedate

20190916

[hd@data10 ~/work/test_shell]$ sh -v test.sh 22

#!/bin/bash

thedate=$1

if ! test ${thedate}; then

thedate=$(/bin/date -d-1day "+%Y%m%d")

fi

echo $thedate

22

cwd=$(cd $(dirname $0); pwd)

cd $(dirname $0); pwd)

cd $(dirname $0); pwd

dirname $0)

dirname $0

logdir="${cwd}/logdir"

jobname="yyz_data_merge_${thedate}"

echo ${jobname}

yyz_data_merge_22

non_var="yzzzz_data_merge/${thedateaaa}*/*"

echo "non_var",$non_var

non_var,yzzzz_data_merge/*/*

echo $thedate

22

linux shell语法检查或者查看shell脚本执行过程的参数介绍及两种使用方法相关推荐

  1. shell脚本执行时报“bad interpreter: Text file busy“的解决方法

    shell脚本执行时报"bad interpreter: Text file busy"的解决方法 参考文章: (1)shell脚本执行时报"bad interprete ...

  2. linux脚本执行过程中被挂起,Linux学习笔记(八)——脚本执行的过程控制

    一.脚本执行过程中的控制 之前的内容中,运行编写好的脚本时都是在命令行上直接确定运行的,并且运行的脚本是实时的,这并不是脚本唯一的运行方式,下面的内容是脚本的其他运行方式.例如在Linux系统中如何控 ...

  3. 在Linux系统中存储设备的两种表示方法

    作者:北南南北 来自:LinuxSir.Org 摘要: 硬盘和硬盘分区在Linux都表示为设备,按我们通俗的说法来说,就是怎么来表示或描述硬盘和或硬盘分区,但这种描述应该是科学和具体的:比如IDE硬盘 ...

  4. linux桌面鼠标可动 但点其他,电脑鼠标能动但点不了的两种解决方法

    大家是否遇到过鼠标用着用着突然点什么都点不了的情况,但是鼠标还是可以动的,此问题导致操作无法继续进行,部分网友对此问题都感到疑惑,检查设备设备都一切正常,要怎么才能解决?这里给大家讲解电脑鼠标能动但点 ...

  5. linux 操作系统root账号被锁定的两种解决方法

    linux 操作系统root账号被锁定的两种解决方法 参考文章: (1)linux 操作系统root账号被锁定的两种解决方法 (2)https://www.cnblogs.com/redhatlinu ...

  6. win7 linux error15,Win7开机黑屏error15:file not found的两种解决方法分享

    Win7开机黑屏error15:file not found怎么办?相信很多朋友都遇到过使用win7系统时,开机黑屏error15:file not found的,这种情况应该如何处理呢?感兴趣的朋友 ...

  7. VsCode shell脚本语法检查插件ShellCheck(shell检查、shell插件、shell语法检查、静态检查)

    像这种,很轻松给你检查出来: 并且告诉你如何修复: 还有网页版的:https://www.shellcheck.net/ 参考文章1:linux shell脚本 静态检查工具 shellcheck 简 ...

  8. 详解shell语法检查模式

    启用 verbose 调试模式 在进入本指导的重点之前,让我们简要地探索下 verbose 模式.它可以用 -v 调试选项来启用,它会告诉 shell 在读取时显示每行.要展示这个如何工作,下面是一个 ...

  9. linux中安shell怎么传入参数,【linux】linux 下 shell命令 执行结果赋值给变量【两种方式】...

    方法1:[通用方法] 使用Tab键上面的反引号 例子如下: find命令 模糊查询在/apps/swapping目录下 查找 文件名中包含swapping并且以.jar结尾的文件 使用反引号 引住命令 ...

最新文章

  1. 找出不超过40亿个给定整数的整数
  2. QC中设置组权限-隐藏筛选器
  3. 你面对以希望为名的绝望微笑
  4. LRU算法及Java实现
  5. idea 类注释,方法注释设置
  6. 初识Mysql(part6)--我需要知道的4条Mysql语句之利用通配符过滤
  7. 判断一个字符(小写变为大写,大写变小写,数字不变,空格输出space,其他字符输出other)C语言
  8. golang(7 方法重写)
  9. Rational Rose 逆向工程(java) 常见问题二则
  10. (转)kafka 详解
  11. 【渝粤教育】国家开放大学2019年春季 1349学前教育科研方法 参考试题
  12. weblogic 找不到数据源问题
  13. 【雷达通信】基于matlab GUI多算法雷达一维恒虚警检测CFAR【含Matlab源码 874期】
  14. Python实现CarMaker TestRun的泛化
  15. windows编译opencv+opencv_contrib 以及解决cmake下载boostdesc_bgm等文件失败问题
  16. 解决IDEA的Plugin org.apache.maven.plugins:maven-archetype-plugin:RELEASE or one of its dependencies cou
  17. 智能管家---11. 用户重置密码功能实现(忘记密码或重置)
  18. 微信小程序注册完整教程
  19. telegram自动发信息_创建telegram 机器人 并发送消息
  20. 使用python求解特征值与特征向量

热门文章

  1. Java基础课-MySQL语法
  2. 前端 DSL 实践指南(上)—— 内部 DSL
  3. 程序员笑话几则!程序员:听说你要app随着手机壳颜色变化?
  4. Python爬虫(第一周)
  5. QQ、微信、立体感、中间展开样式进度条
  6. com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
  7. 【流行框架】Dubbo
  8. 004 ps基础裁剪照片,制作大头贴
  9. Word文档左边的竖线如何去掉
  10. Excel中,单元格内选取指定字符之间的字符,MID()函数的使用,MID()函数与IFS()函数使用