首页 > 系统相关 >shell补-特殊玩法-shell编程debug

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

时间:2023-12-15 11:14:40浏览次数:33  
标签:shell 玩法 lnmp lamp sh exit debug root

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. 没带+表示标准输出

标签:shell,玩法,lnmp,lamp,sh,exit,debug,root
From: https://www.cnblogs.com/xjianbing/p/17902932.html

相关文章

  • debug解决实际问题--python
    简述:原代码一直报错,提示索引超出范围"IndexError:tupleindexoutofrange"一、原代码:#-*-coding:utf-8-*-importpymysql,datetime#获取框架合约数据defframe_treaty_get(frame_treaty_no_list):frame_treaty_list=[]forframe_treaty_noinframe_t......
  • shell补-循环案例-循环case
    shell补-循环案例-循环casecase结构条件的语法格式;一般应用菜单的功能case$变量名in"值1")###如果变量的值1,则执行此程序1;;"值2")###如果变量的值2,则执行此程序2;;###....省略其他分支YES|yes|Yes)#####此处的值,可以带些符号,比如|表示或者;也可以用[a-z]感觉......
  • shell补-特殊玩法-生成随机字符串
    shell补-特殊玩法-生成随机字符串方法1:md5sum方法2:tr+/dev/urandom方法3:内置变量RANDOM;#方法1[root@localhostser]#opensslrand-base64108/54arQpCmQ12Q==[root@localhostser]##方法2必备[root@localhostser]#date+%N|md5sum###给日期加密;可以写其......
  • shell补-特殊玩法-批量修改文件
    shell补-特殊玩法-批量修改文件几个其他方法;感觉最简单的就是rename###方法3rename#rename找谁,替换为什么范围[root@localhostrandom]#ll总用量0-rw-r--r--.1rootroot011月1716:03bcauiftqdr.mrxu.html-rw-r--r--.1rootroot011月1716:03dkjoyp......
  • 过瑞数中的高级debugger
    (function(){vara=newDate();debugger;returnnewDate()-a>100;}())这种debugger如果是用‘一律不在此处暂停’是过不去的。 要在浏览器的控制台中执行并阻止debugger语句,你可以使用JavaScript的toString()方法来重写原函数的定义。这种方法......
  • shell补-特殊玩法-批量修改密码
    shell补-特殊玩法-批量修改密码写一个脚本批量添加用户和随机密码root@localhostusr]#bashrandomadduser.sh更改用户mrrxu00001的密码。passwd:所有的身份验证令牌已经成功更新。更改用户mrrxu00002的密码。passwd:所有的身份验证令牌已经成功更新。更改用户mrr......
  • shell补-特殊玩法-安全防护案例
    shell补-特殊玩法-安全防护案例案例1:编写一个shell脚本解决类DDOS攻击的生成案例,请更加web日志或者系统网络连接数,监控当某个ip并非连接数,若短时间内PV达到100(阈值),即调用防火墙命令封掉对应的ip.防火墙命令iptables-IINPUT-sIP地址-jdrop查看被封的ip:iptables-nL......
  • shell补-特殊玩法-优化显示加入成功失败标识函数
    shell补-特殊玩法-优化显示加入成功失败标识函数加载函数文件/etc/init.d/functionsaction"******"/bin/true####正常显示action"******"/bin/false####失败显示[root@localhost~]#./etc/init.d/functions[root@localhost~]#action......
  • shell补-变量再见变量
    shell补-变量-变量变量的本质shell补-变量常见的环境变量环境变量含义备注LANGlanguage记录系统字符集语言zh_CN.UTF-8en_US.UTF-8localectl(centos7)修改文件/etc/sysconfig/i18n(centos6.x)PS1命令行格式PATH命令路径执行命令,系统会在PATH路径......
  • shell补-运算-数字运算
    shell补-运算-数字运算RANDOM[root@localhostsub_str]#manbash###/RANDOM.........RANDOMEachtimethisparameterisreferenced,arandomintegerbetween0and32767isgenerated.Thesequenceofrandomnumbersmaybeinitializedbyas......