shell补-特殊玩法-shell编程debug

发布时间 2023-12-15 11:05:40作者: WeChat2834
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]# 


注意事项

  1. 带+标识执行过程
  2. 没带+表示标准输出