- 一、调试脚本
- 1.1、使用选项-x
- 1.2、 使用 set -x 和set +x
- 1.3 自定义调试信息格式
- 1.4、 命令详解
- 二、函数和参数
- 2.1、定义函数
- 2.2、函数调用
- 2. 3、参数传递
- 2.4、导出函数
- 2.5、读取命令返回值(状态)
- 2.6、向命令传递参数
试功能是每一种编程语言都应该实现的重要特性之一。
一、调试脚本
1.1、使用选项-x
启用shell脚本的跟踪调试功能。
bash -x script.sh 运行-x标志的脚本可以打印出所执行的每一行命令以及当前状态。
注意你也可以使用sh -x script.sh
1.2、 使用 set -x 和set +x
对脚本进行部分调试。例如:
-x 和 +x 对调试区域进行了限制
#!/bin/bash
#文件名:debug.sh
for i in {1..6};
set -x
echo $i
set +x
done
echo "Script executed"
1.3 自定义调试信息格式
通过 _DEBUG 环境变量来设置调试风格
#!/bin/bash
function DEBUG(){
[ "_DEBUG" =="on" ] && $@ || :
}
for i in {1..10}
do
DEBUG echo $i
done
执行语句前加上_DEBUG=on 就会把调试信息打印出来
不传入_DEBUG=on 执行脚本,不会有任何输出 ,脚本中命令":" 告诉shell 不要进行任何操作。
1.4、 命令详解
set -x :在执行时显示参数和命令
set +x :禁止调试
set -v : 当前命令进行读取时 显示输入
set +v : 禁止打印输入
二、函数和参数
在上脚本调试中,我们已经用到了自定义函数。
2.1、定义函数
function fname(){
statements;
}
或者
fname(){
statements;
}
2.2、函数调用
只需要使用函数名就可以调用某个函数。
2. 3、参数传递
参数可以传递给函数, 并由脚本进行访问,并由脚本进行访问
fname arg1 arg2 ;#传递参数
fname(){
echo $1, $2; #访问参数1和参数2
echo "$@";#以列表的方式一次性访问所有参数
echo "$*";#类似于$@,但是参数被作为单个实体
return 0;#返回值
}
$1 是第一个参数
$2 是第二个参数
@"被扩展成 “$1” “$2” “” 被扩展成 “$1c$2c$3”
2.4、导出函数
函数也能像环境变量一样 用export 导出,如此一来,函数的作用域就额可以扩展到子进程中。
语法 :export -f fname
2.5、读取命令返回值(状态)
cmd;
echo $?;
$?会给出命令cmd 的返回值
返回值称为退出状态,可以用于分析命令执行成功与否。 退出状态为0表示成功退出,否则为非0;
脚本如下
#!/bin/bash
#文件名:sucess_test.sh
CMD="command"
$CMD
if [ $? -eq 0 ];
then
echo "$CMD executed successfully"
else
echo "$CMD terminated unsuccessfully"
fi
2.6、向命令传递参数
命令的参数能够以不同的格式进行传递。假设-p,-v 是可用选项。 -k N 是另一个可以接受的数字选项。
command -p -v -k 1 file
command -pv -k 1 file
command -vpk 1 file
command file -pvk 1