第八章 内部字段分隔符IFS脚本调试DEBUG
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第八章 内部字段分隔符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 :选项是打印所有行的信息
[[email protected] ~]# 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
或者
[[email protected] ~]# 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
- set -x:在执行时候显示参数和命令
- set +x:禁止调试
- set -v:当命令进入读取时候显示输入
- 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环境变量来建立:
[[email protected] ~]# vi d.sh
#!/bin/bash
DEBUG() {
[ "$_DEBUG" = "on" ] && [email protected] || :
}
for i in {1..5}
do
DEBUG echo $i
done
将调试功能设置为“on”来运行脚本:
[[email protected] ~]# _DEBUG=on ./d.sh
1
2
3
4
5
将需要调试的行前加上DEBUG,运行脚本前没有加_DEBUG=on就不会显示任何信息,脚本中 ":" 告诉shell不要进行任何操作。
4、使用shebang调试方法
这个最便捷的方法。把shebang从 #!/bin/bash 修改成#!/bin/bash -xv,其他就不用做任何操作了。
示例:
[[email protected] ~]# cat dd.sh
#!/bin/bash -xv
for i in {1..5}
do
echo $i
done
运行结果:
[[email protected] ~]# ./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
以上是关于第八章 内部字段分隔符IFS脚本调试DEBUG的主要内容,如果未能解决你的问题,请参考以下文章