脚本调试和函数

来源:互联网 发布:手机辅助软件 编辑:程序博客网 时间:2024/05/21 07:55

1.脚本调试
  调试功能是每一种编程语言都应该实现的重要特性之一,当出现一些始料未及的情况时,用它来生成脚本运行信息。调试信息可以帮你弄清除是什么原因使得程序发生崩溃或行为异常。
  -x标识将脚本中执行过的每一行都输出到stdout。不过,我们也可能只关注脚本某些部分的命令及参数的打印输出。针对这种情况,可以在脚本中使用set builtin来启用或禁止调试打印。

set -x:在执行时显示参数和命令set +x:禁止调试set -v:当命令进行读取时显示输入set +v:禁止打印输出

1)利用选项-x,启用shell脚本的跟踪调试功能

bash -x script.sh

2)使用set -x和set +x对脚本进行部分调试

for i in {1..6};do    set -x    echo $i    set +xdoneecho "Script executed"[lirong@lr ~/work_lr/mygit/shell]# sh script.sh + echo 11+ set +x+ echo 22+ set +x+ echo 33+ set +x+ echo 44+ set +x+ echo 55+ set +x+ echo 66+ set +xScript executed

3)自定义格式显示调试信息

function DEBUG(){    [ "$_DEBUG" == "on" ] && $@ || :}for i in {1..10}do    DEBUG echo $idone

  我们在每一个需要打印调试信息的语句前加上DEBUG。如果没有把_DEBUG=on传递给脚本,那么调试信息就不会打印出来。在Bash中,命令”:”告诉shell不要进行任何操作。

[lirong@lr ~/work_lr/mygit/shell]# _DEBUG=on sh debug.sh     1    2    3    4    5    6    7    8    9    10[lirong@lr ~/work_lr/mygit/shell]# sh debug.sh [lirong@lr ~/work_lr/mygit/shell]#

2.函数和参数

1)定义函数

function fname(){}或者:fname(){}

2)只需要使用函数名就可以调用某个函数

fname;      #执行函数

3)参数可以传递给函数,并由脚本进行访问

fname arg1 arg2;    #传递参数

  以下是函数fname的定义。在函数fname中,包含各种访问函数参数的方法。

fname(){    echo $1,$2;     #访问参数1和参数2    echo "$@";      #以列表的方式一次性打印所有参数    echo "$*";      #类似于$@,但是参数被作为单个实体    return 0;       #返回值}

  类似地,参数可以传递给脚本并通过script:$0访问

$1 是第一个参数。$2 是第二个参数。$n 是第n个参数。"$@" 被扩展成 "$1" "$2" "$3" 等。"$*" 被扩展成 "$1c$2c$3" ,其中 c 是IFS的第一个字符。"$@" 要比 "$*" 用得多。由于 "$*" 将所有的参数当做单个字符串,因此它很少被使用。

4)导出函数
  函数也能像环境变量一样用export导出,函数的作用域就可以扩展到子进程中

export -f fname

5)向命令传递参数
  命令的参数能够以不同的格式进行传递。假设-p、-v是可用选项,-k N 是另一个可以接受数字的选项,同时该命令还接受一个文件名作为参数,那么,它有以下几种执行方式

$ command -p -v -k 1 file$ command -pv -k 1 file$ command -vpk 1 file$ command file -pvk 1

2017-11-28-LR Linux shell攻略脚本