6.调试脚本、函数使用

  • 调试脚本

set  -x:在执行时显示参数和命令
set  +x:禁止调试
set  -v:当命令进行读取时显示输入
set  +v:禁止打印输入

技巧1    启用shell脚本的跟踪调试功能
bash   -x    script.sh

技巧2   对脚本部分调试(set  -x  / set  +x)
#!/bin/bash                              set  -x  / set  +x对脚本区域进行限制,只会输出echo  $i
for  i  in  (1..5)
do
    set  -x
    echo  $i
    set  +x
done
echo  "Fine"

技巧3   自定义格式显示调试信息(通过传递_DEBUG环境变量来建立)
#!/bin/bash                                                                如果没有把  _DEBUG=on传递给脚本,前端含DEBUG的输出语句就不会显示。
function  DEBUG()                                                         :是告诉shell不要进行任何操作
{
        [  "$_DEBUG"  ==  "on"  ]  &&  $@  | |  :
}
for   i  in   (1...8)
do 
      DEBUG  echo  $i
done
_DEBUG=on     script.sh   将其设置为on运行以上脚本

技巧4   自动启用脚本调试功能
将#!/bin/bash修改成#!/bin/bash  -xv ,即可不用其他选项就可开启调试功能
 

  • 函数定义使用
  1. 定义函数
       function    fname()              or            fname()
       {                                                              {
                   statements;                                        statements;
       }                                                              }
  2. 调用函数
    fname  ; 
  3. 将参数传递给函数
    fname  arg1  arg2
  4. 相关参数的含义
    $n  :第n个参数                            $0:脚本程序的执行名
    $@:所有脚本参数内容(列表方式打印所有参数)  ------常用比$*
    $*:所有脚本参数(参数被作为单个个体)
    $?:给出命令返回值(又称退出状态),命令成功退出状态为0,否则非0

技巧1   编写Fork炸弹
:(){  :|:&  };:
更好理解的方式
:()                                         bomb()  
{                                                   {
     :|:&                                            bomb|bomb&
};                                                } ;
:                                                 bomb
这是一个函数本身的递归调用,function关键词可以省略。定义一个函数,在主体内递归调用函数本身,通过管道符调用一个新进程(也为函数本身),&后台执行,最后调用本身函数执行该系列命令。

技巧2  导出函数
export   -f   fname

技巧3   读取命令返回值
cmd;
echo   $?;
脚本例子
#!/bin/bash
cmd="command" #执行的相关命令
$cmd
if   [  $? -eq  0 ]
then
       echo  "$cmd executed successfully"
else
       echo  "$cmd terminated unsucessfully"
fi
 

你可能感兴趣的:(Bash,shell,入门基础)