有条件地排除ksh中的echo语句

时间:2014-01-07 12:45:16

标签: shell scripting echo ksh

我想在我的KornShell(ksh)脚本中使用详细/非详细模式。

详细说明,我需要用

执行语句
echo blah blah blah

但是在非冗长的情况下,我不想排除那些echo语句 现在我猜测有一种更好/更优雅的方式来实现这一点,而不是使用全局的冗长状态并做一个

if [[ $verbose eq 1 ]] ; then
    echo blah blah blah
fi

我是ksh的新手,并不知道所有的技巧。 有人会建议可以做些什么吗?

3 个答案:

答案 0 :(得分:3)

这应该只适用于kshbash或任何POSIX或bourne shell派生词:

$ debug=true
$ $debug && echo blah blah blah
blah blah blah
$ debug=false
$ $debug && echo blah blah blah
$

答案 1 :(得分:1)

哎呀,你说“ksh”,但概念很相似......

您可以这样做:

export DEBUG=1
[ $DEBUG -eq 1 ] && echo hi
hi

export DEBUG=0
[ $DEBUG -eq 1 ] && echo hi

或者您可以使用“-xv”标志执行脚本,方法是在开始时更改shebang行

#!/bin/bash -xv
Line 1 of your script...
Line 2 of your script

或执行如下脚本:

bash -xv yourscript

或者,您可以在登录/配置文件脚本中定义debug()函数并在那里进行检查。

答案 2 :(得分:0)

没有进一步的ado(在ksh和bash中有效,而不是POSIX sh):

# function verbose()
# accepts on | off | an empty string | a message
# on|off changes the global variable _Verbose 
# Anything else will return the value of ${_Verbose}
# and (optionally) display a message (which cannot start with on or off)
#
# Use only as conditional for echo: verbose && echo ...

_Verbose=0
verbose() { 
    case ${1} in
    (on) _Verbose=1;;
    (off) _Verbose=0;;
    ("") ((_Verbose));;
    (*)  ((_Verbose)) && echo "$*"
    esac
} 


$ verbose on
$ verbose && echo "Here's a message"
Here's a message
$ verbose "And another one"
And another one
$
$ verbose off
$ verbose && echo "Here's a message"
$ verbose "And another one"