脚本调试和函数

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 +x
done
echo "Script executed"
[lirong@lr ~/work_lr/mygit/shell]# sh script.sh 
+ echo 1
1
+ set +x
+ echo 2
2
+ set +x
+ echo 3
3
+ set +x
+ echo 4
4
+ set +x
+ echo 5
5
+ set +x
+ echo 6
6
+ set +x
Script executed

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

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

  我们在每一个需要打印调试信息的语句前加上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攻略脚本

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值