第八章 内部字段分隔符IFS、脚本调试DEBUG
第八章 内部字段分隔符IFS、脚本调试DEBUG内部字段分隔符内部字段分隔符(internal field separator,IFS)是shell脚本中的一个特殊变量,在处理文本数据时很有用。把单个数据流划分成不同的数据元素的定界符,内部字段分隔符就是用于特定用途的定界符。IFS是存储定界符的环境变量,是shell环境中的默认定界符字符串,默认值为空白字符(换行符、制表符、空格) 迭代一个字符串或者CSV(comma separated value,都好分隔型数值)中的单词: #!/bin/bash data="111,222,333,444,555,666" oldIFS=$IFS #定义一个变量为默认IFS IFS=,#设置IFS为逗号 for i in $data do echo S:$i done IFS=$oldIFS #还原IFS为默认值 运行结果: S:111 S:222 S:333 S:444 S:555 S:666 上边示例 把IFS设置为逗号(,),shell将逗号解释为一个定界符,因此变量$i在每次迭代中读取由逗号分隔的字符串作为变量值。 shell脚本的调试调试功能是每种编程语言都具备的特性之一,出现一些始料未及的情况,使用调试功能可以弄清除是什么原因发生了错误或者异常。shell脚本自身已经包含了调试的选项,能都打印出脚本接受的参数和输入。 1、使用选项 -x ? -x :选项是打印所有行的信息 [root@ceshi ~]# bash -x 80.sh ++ grep /boot ++ df -hT ++ cut -d % -f1 ++ awk '{print $6}' + use=19 + '[' 19 -lt 80 ']' + echo 'Warning!!/boot disk is full' Warning!!/boot disk is full 或者 [root@ceshi ~]# sh -x 80.sh ++ df -hT ++ cut -d % -f1 ++ awk '{print $6}' ++ grep /boot + use=19 + '[' 19 -lt 80 ']' + echo 'Warning!!/boot disk is full' Warning!!/boot disk is full 2、使用set +/-x;set +/-v
示例 #!/bin/bash for i in {1..5} do set -x echo $i set +x done echo "end" 运行结果: 1 2 3 4 5 end + echo 1 + set +x + echo 2 + set +x + echo 3 + set +x + echo 4 + set +x + echo 5 + set +x 上例中,仅在-x和+x的区域中才会显示调试信息。 3、使用_DEBUG 环境变量 如果需要自定义格式显示调试信息可以通过_DEBUG环境变量来建立: [root@ceshi ~]# vi d.sh #!/bin/bash DEBUG() { [ "$_DEBUG" = "on" ] && $@ || : } for i in {1..5} do DEBUG echo $i done 将调试功能设置为“on”来运行脚本: [root@ceshi ~]# _DEBUG=on ./d.sh 1 2 3 4 5 将需要调试的行前加上DEBUG,运行脚本前没有加_DEBUG=on就不会显示任何信息,脚本中 ":" 告诉shell不要进行任何操作。 4、使用shebang调试方法 这个最便捷的方法。把shebang从 #!/bin/bash 修改成#!/bin/bash -xv,其他就不用做任何操作了。 示例: [root@ceshi ~]# cat dd.sh #!/bin/bash -xv for i in {1..5} do echo $i done 运行结果: [root@ceshi ~]# ./dd.sh #!/bin/bash -xv for i in {1..5} do echo $i done + for i in '{1..5}' #从这里开始debug + echo 1 1 + for i in '{1..5}' + echo 2 2 + for i in '{1..5}' + echo 3 3 + for i in '{1..5}' + echo 4 4 + for i in '{1..5}' + echo 5 5 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |