shell脚本的错误检测总结
shell脚本的错误检测总结shell脚本的错误检测多种⽅法总结
⼀、通过使⽤命令或选项,检测错误:
正常运⾏:
[root@ping ~]# cat case_one.sh
#!/bin/sh
echo -ne "确定清空回收站 y/n?\n:"
read answer
answer=`echo $answer | tr [a-z] [A-Z]`
if [ $answer = Y ]
then
rm -rf /root/.local/share/Trash/files/*
echo "回收站已清空!"
else
mv /root/.local/share/Trash/files/* /root/桌⾯/
echo "回收站⽂件已恢复!"
fi
运⾏结果:
[root@ping ~]# sh case_one.sh
确定清空回收站 y/n?
:y
回收站已清空!
案例⼀:运⾏时添加选项-x,冗余跟踪。
[root@ping ~]# cat case_one.sh
#!/bin/sh
echo -ne "确定清空回收站 y/n?\n:"
read answer
answer=`echo $answer | tr [a-z] [A-Z]`
if [ $answer = Y ]
then
rm -rf /root/.local/share/Trash/files/*
echo "回收站已清空!"
else
mv /root/.local/share/Trash/files/* /root/桌⾯/
echo "回收站⽂件已恢复!"
fi
客厅十字绣图片运⾏结果:
方脸发型设计+ echo -ne '确定清空回收站 y/n?\n:'
确定清空回收站 y/n?
:+ read answer
y
++ echo y
++ tr '[a-z]' '[A-Z]'
+ answer=Y
+ '[' Y = Y ']'
+ rm -rf /root/.local/share/Trash/files/ss.2
+ echo  '回收站已清空!'
回收站已清空!
光棍节的祝福语
注释:每⼀条可执⾏脚本命令前都会有⼀个“+”,当⼀条命令出现⼦级命令时会出现两个,即“++”。案例⼆:运⾏时添加选项-v,冗余模式。
建行的网上银行
[root@ping ~]# sh -v case_one.sh
#!/bin/sh
echo -ne "确定清空回收站 y/n?\n:"
确定清空回收站 y/n?
:read answer
y
answer=`echo $answer | tr [a-z] [A-Z]`
echo $answer | tr [a-z] [A-Z]
if [ $answer = Y ]
then
rm -rf /root/.local/share/Trash/files/*
echo "回收站已清空!"
else
mv /root/.local/share/Trash/files/* /root/桌⾯/
echo "回收站⽂件已恢复!"
fi
回收站已清空!
注释:-v选项脚本运⾏时,会将脚本内容输出,略显冗余,但选项常⽤于检测逻辑错误和语法错误。
案例三:脚本中添加命令set -x/-v,启⽤冗余跟踪/冗余模式。
#!/bin/sh
set -x
echo -ne "确定清空回收站 y/n?\n:"
read answer
answer=`echo $answer | tr [a-z] [A-Z]`
if [ $answer = Y ]
then
rm -rf /root/.local/share/Trash/files/*
echo "回收站已清空!"
else
mv /root/.local/share/Trash/files/* /root/桌⾯/ echo "回收站⽂件已恢复!"
fi
[root@ping ~]# sh case_one.sh
+ echo -ne '确定清空回收站 y/n?\n:'
确定清空回收站 y/n?
:+ read answer
y
++ echo y
++ tr '[a-z]' '[A-Z]'
+ answer=Y
+ '[' Y = Y ']'
+ rm -rf '/root/.local/share/Trash/files/*'
+ echo '回收站已清空!'
回收站已清空!
[root@ping ~]# cat case_one.sh
#!/bin/sh
set -v
echo -ne "确定清空回收站 y/n?\n:"
read answer
answer=`echo $answer | tr [a-z] [A-Z]`
if [ $answer = Y ]
then
rm -rf /root/.local/share/Trash/files/*
echo "回收站已清空!"
else
mv /root/.local/share/Trash/files/* /root/桌⾯/ echo "回收站⽂件已恢复!"
fi
echo -ne "确定清空回收站 y/n?\n:"
确定清空回收站 y/n?
:read answer
y
answer=`echo $answer | tr [a-z] [A-Z]`
echo $answer | tr [a-z] [A-Z]
if [ $answer = Y ]
then
rm -rf /root/.local/share/Trash/files/*
echo "回收站已清空!"
else
mv /root/.local/share/Trash/files/* /root/桌⾯/
echo "回收站⽂件已恢复!"
fi申请低保的条件
回收站已清空!
注意:通常shell脚本,使⽤英⽂书写相对较为专业。包括注释,输出结果等,但是很多时候却有难以避免情况,往往出现时错误也随之⽽来。错误常常在于符号的使⽤⽅⾯。以本例说:!,“”,状况较多,也是希望在写脚本时注意。
⼆、通过使⽤输出语句,检测错误:
[root@ping ~]# cat case_one.sh
#!/bin/sh百丈崖漂流
echo -ne "确定清空回收站 y/n?\n:"
read answer
answer=`echo $answer | tr [a-z] [A-Z]`
echo "你的选择是:$answer"
if [ $answer = Y ]
then
rm -rf /root/.local/share/Trash/files/*
echo "回收站已清空!"
echo "你的选择是:$answer"
else
mv /root/.local/share/Trash/files/* /root/桌⾯/
echo "回收站⽂件已恢复!"
echo "你的选择是:$answer"
fi
[root@ping ~]# sh case_one.sh
确定清空回收站 y/n?
:y
你的选择是:Y
回收站已清空!
你的选择是:Y
注释:使⽤这种⽅式通常⽤于脚本代码规模较⼩情况下,规模较⼤时尽管效果明显,但过于冗杂,且不便于查。
三、通过使⽤层次调试控制检测输出。
#!/bin/sh
debug=3
test $debug -gt 0 && echo "Debug is on"
echo -ne "确定清空回收站 y/n?\n:"
read answer
test $debug -gt 1 && echo "你的选择是:$answer"
answer=`echo $answer | tr [a-z] [A-Z]`
if [ $answer = Y ]
then
rm -rf /root/.local/share/Trash/files/*
echo "回收站已清空!"
test $debug -gt 2 && echo "你的选择是:$answer"
else
mv /root/.local/share/Trash/files/* /root/桌⾯/
echo "回收站⽂件已恢复!"
test $debug -gt 2 && echo "你的选择是:$answer"
fi
[root@ping ~]# sh case_one.sh
Debug is on
确定清空回收站 y/n?
:y
你的选择是:y
回收站已清空!
你的选择是:Y
注释:
1. 本例使⽤两个优点:⼀是通过定义变量从⽽调试检测层次,⼆是即使规模较⼤,便于缩减代码量。
2. 通过定义层次,便于定位检测点。
3. 通过修改debug检测值,灵活测试检测点。
四、通过函数简化错误检测,有效利⽤预定义变量$?。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。