shell补-特殊玩法-shell编程 debug
- debug思想 debug测试
- 单步执行脚本 自个调试,用注释,或者echo自个打印输出啥的,就这么搞
- bash -x 整个脚本调试
- set与开关debug (适用于脚本或者命令行都可以)
-
- set -x 开始debug
- set +x 结束debug
##在脚本启用set ;set -x开始,set +x 结尾
[root@localhost shell_rpo]# cat test_andor4.sh
#!/bin/bash
###根据选项安装lnmp还是lamp;录入选项限制1,2,3;
path=/root/tmp/Instal
#条件判断,判断目录是否存在,
#开发脚本,真和假两个情况,优先处理错误的逻辑情况,因为错误的情况最容易处理
[ ! -d "${path}" ]&& mkdir "${path}" -p
#开发该脚本的正常逻辑了
cat << END
1. [install lamp]
2. [install lnmp]
3. [exit]
please input the number you want!
END
###接收用户输入
read num
#根据该num变量进行逻辑处理
expr $num + 1 &>/dev/null ####通过执行命令是否报错来判断是否为数字;如果报错则执行命令结果是非0;执行结果不需要所以录入黑洞文件
###判断上条命令的执行结果
####限制用户输入的必须是数字
[ $? -ne 0 ] &&{
echo "The num you input mast in {1|2|3}"
exit 1
}
#对输入的数字是1,2,3的判断
#当输入的数字是1时的判断
[ "${num}" -eq "1" ]&& {
echo "String installing lamp ...waiting"
sleep 2;
#执行lamp.sh安装脚本
#对文件权限进行判断
[ ! -x "${path}/lamp.sh" ] && {
echo "The file does not exist or can not be exec"
exit 1
}
#通过路径执行文件,需要可执行文件权限
$path/lamp.sh
exit $? ###脚本执行后返回一个状态玛,就上次执行结果
}
set -x ########开启调试
###输入的数字是2的时候判断
[ "${num}" -eq "2" ]&&{
echo "start installing ......lnmp....."
sleep 2;
[ -x "$path/lnmp.sh" ]||{
echo "The file not exit or can not be exec"
exit 2;
}
$path/lnmp.sh
exit $?
}
set +x ########结束调试
###当录入数字是3的时候
[ "$num" -eq "3" ]&&{
echo "Bye Bye "
exit 3;
}
# 限制用户必须输入的是1,2,3
#[[]] 支持正则表达式 [[$num=~[1-3] ]]
[[ ! "$num" =~ [1-3] ]]&&{
echo "只能录入选项{1|2|3}"
exit 4
}
[root@localhost shell_rpo]#
[root@localhost shell_rpo]# bash test_andor4.sh
1. [install lamp]
2. [install lnmp]
3. [exit]
please input the number you want!
2 ##录入了2,
+ '[' 2 -eq 2 ']'
+ echo 'start installing ......lnmp.....'
start installing ......lnmp.....
+ sleep 2
+ '[' -x /root/tmp/Instal/lnmp.sh ']'
+ /root/tmp/Instal/lnmp.sh
Install lnmp ...end....
+ exit 0
debug方法 | |
---|---|
sh -x | 显示脚本的执行过程80 -95% |
set 命令设置开始debug和结束debug的位置 | 显示脚本支持过程,解决复杂脚本故障 |
单步执行 | 就自个以前常用的,通过注释掉其他部分;或者echo打印输出来协助调试 |
[root@localhost shell_rpo]# bash -x test_andor4.sh a ###整个shell都开启调试。
+ path=/root/tmp/Instal
+ '[' '!' -d /root/tmp/Instal ']'
+ cat
1. [install lamp]
2. [install lnmp]
3. [exit]
please input the number you want!
+ read num
a#####录入a不满足选项
+ expr a + 1
+ '[' 2 -ne 0 ']'
+ echo 'The num you input mast in {1|2|3}'
The num you input mast in {1|2|3}
+ exit 1
[root@localhost shell_rpo]# bash -x test_andor4.sh
+ path=/root/tmp/Instal
+ '[' '!' -d /root/tmp/Instal ']'
+ cat
1. [install lamp]
2. [install lnmp]
3. [exit]
please input the number you want!
+ read num
1 ####录入1,满足为数字
+ expr 1 + 1
+ '[' 0 -ne 0 ']'
+ '[' 1 -eq 1 ']'
+ echo 'String installing lamp ...waiting'
String installing lamp ...waiting
+ sleep 2
+ '[' '!' -x /root/tmp/Instal/lamp.sh ']'
+ /root/tmp/Instal/lamp.sh
Install lamp ...end...
+ exit 0
[root@localhost shell_rpo]#
注意事项
- 带+标识执行过程
- 没带+表示标准输出