当前位置:首页 » 内部字段分隔符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为默认值
执行结果:
[root@mail text]# ./6.sh
S:111
S:222
S:333
S:444
S:555
S:666
IFS被设置为逗号(,),shell将逗号解释为一个定界符,因此变量$i在每次迭代中读取由逗号分隔的字符串作为变量值。
Shell脚本的调试
调式功能是每种编程语言都具备的特性之一,出现一些始料未及的情况,使用调式功能可以弄清楚是什么原因发生了错误或者异常。shell脚本自身已经包含了调式选项,能都打印出脚本接受的参数和输入。
1、使用选项 -x
bash -x script.sh 或者 sh -x script.sh
-x 选项是打印所有行的信息。
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"
上例中,仅在 -x 和 +x 的区域中才会显示调式信息。
3、使用 _DEBUG 环境变量
如果需要自定义格式显示调式信息可以通过_DEBUG环境变量来建立:
#!/bin/bash
DEBUG() {
[ "$_DEBUG" = "on" ] && $@ || :
}
for i in {1..5}
do
DEBUG echo $i
done
将调试功能设置为“on”来运行脚本:
_DEBUG=on ./script.sh
将需要调式的行前加上DEBUG,运行脚本前没有加_DEBUG=on就不会显示任何信息,脚本中“:”告诉shell不要进行任何操作。
4、使用shebang调式方法
这是最便捷的方法。把shebang 从#!/bin/bash 修改成 #!/bin/bash -xv ,其他就不用做任何操作了。