linux 脚本 -a,debug a shell, 查看shell执行过程中每一步的结果, set -x

我们最开始写脚本的时候总是比较简单的,慢慢的脚本写的越来越复杂,这个时候我们在写的过程中就会遇到些问题,最开始的时候我总是不停的试,不停的改,最后还是可以折腾出来的,不过效率比较低。

后来我无意中看到一遍文章讲Linux的一些技巧的,里面提到在脚本的开始添加 set -x 这么一句,它可以让我们看到脚本执行的时候每一句的输出结果,有了这个在写脚本的时候就比较快了,它怎么用呢?

1. 我们可以在脚本开始的地方加入这个命令

set -x

2. 也可以向下面这样直接加在后面

#!/bin/ksh -x

3. 可以在执行脚本时这样做

#ksh -x /locale/shell.sh怎么感觉跟孔乙己教鲁迅“回”字的四种写法:)

关于set 有一篇man page 英文的

set

Manipulate shell variables and functions.

Syntax

set [--abBCefhHkmnpPtuvx] [-o option] [argument ...]

If no options or arguments are supplied, set displays the

names and values of all shell variables and functions, sorted according to the

current locale, in a format that may be reused as input. When options are supplied, they set or unset shell attributes.

Options

Using `+' rather than `-' will cause the option to be turned off.

-a allexport

Mark variables which are modified or created for export.

-b notify

Cause the status of terminated background jobs to be

reported immediately, rather than before printing the

next primary prompt.

-B braceexpand The shell will perform brace expansion.

This option is on by default.

-C noclobber

Prevent output redirection using `>', `>&',

and `<>' from overwriting existing files.

-e errexit

Exit immediately if a simple command exits with a non-zero

status, unless the command that fails is part of an until or

while loop, part of an if statement, part of a && or || list,

or if the command's return status is being inverted using !.

-f noglob Disable file name generation (globbing).

-h hashall Locate and remember (hash) commands as they are looked

up for execution. This option is enabled by default.

-H histexpand

Enable `!' style history substitution

This option is on by default for interactive shells.

-k keyword

All arguments in the form of assignment statements are

placed in the environment for a command, not just those that

precede the command name.

-m monitor Job control is enabled.

-n noexec Read commands but do not execute them; this may be used

to check a script for syntax errors.

This option is ignored by interactive shells.

-o option-name

Set the option corresponding to `option-name'

The `option-names' are listed above and below (in ITALICS)

emacs : Use an emacs-style line editing interface .

history : Enable command history,

this option is on by default in interactive shells.

ignoreeof : An interactive shell will not exit upon reading EOF.

posix : Change the behavior of Bash to match the POSIX 1003.2 standard.

vi : Use a vi-style line editing interface.

-p privileged

Turn on privileged mode. In this mode,

the $BASH_ENV and $ENV files are not processed,

shell functions are not inherited from the environment,

and the SHELLOPTS variable, if it appears in the environment,

is ignored.

If the shell is started with the effective user (group) id

not equal to the real user (group) id, and the -p option

is not supplied, these actions are taken and the effective

user id is set to the real user id.

If the -p option is supplied at startup, the effective user

id is not reset. Turning this option off causes the effective

user and group ids to be set to the real user and group ids.

-P physical

If set, do not follow symbolic links when performing

commands. The physical directory is used instead.

-t onecmd Exit after reading and executing one command.

-u nounset

Treat unset variables as an error when performing

parameter expansion. An error message will be written

to the standard error, and a non-interactive shell will exit.

-v verbose

Print shell input lines as they are read.

-x xtrace

Print a trace of simple commands and their arguments

after they are expanded and before they are executed.

--

If no arguments follow this option, then the positional parameters are unset.

Otherwise, the positional parameters are set to the arguments,

even if some of them begin with a `-'.

-

Signal the end of options, cause all remaining arguments to be

assigned to the positional parameters. The `-x' and `-v'

options are turned off. If there are no arguments, the positional parameters

remain unchanged.

Examples

Set the variable 'mydept' equal to 'Sales' :

mydept=Sales

To make the change permanent:

export mydept

Symbolic Links

By default, Bash follows the logical chain

of directories when performing commands which change the current directory.

e.g.

If `/usr/sys' is a symbolic link to `/usr/local/sys' then:

$ cd /usr/sys; echo $PWD

/usr/sys

$ cd ..; pwd

/usr

If set -P is on (do not follow symbolic links), then:

$ cd /usr/sys; echo $PWD

/usr/local/sys

$ cd ..; pwd

/usr/local

Debugging part of a script:

set -x# activate debugging

# your commands go here...

set +x# stop debugging

The options can also be used upon invocation of the shell.

The current set of options may be found in $-. The remaining N arguments

are positional parameters and are assigned, in order, to $1, $2,

... $N. The special parameter # is set to N.

set is a POSIX `special' builtin. The return status is always zero unless an invalid

option is supplied.

"Never memorize what you can look up in books" - Einstein

一本非常好的Linux+Unix shell编程教材:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值