第八章 內部字段分隔符IFS、腳本調試DEBUG
阿新 • • 發佈:2018-05-10
shel內部字段分隔符IFS腳本調試 shell腳本調試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
- 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環境變量來建立:
[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
第八章 內部字段分隔符IFS、腳本調試DEBUG