Shell程式設計基礎學習之五:重定向與指令碼除錯

趙明威發表於2014-09-20

我們經常用到shell修改配置檔案,將一些配置匯入到具體的文字就特別重要了

玩轉檔案描述符合重定向

用下面的方法,可以將輸出文字重定向或者

儲存到一個文字中 一個 > 清空,兩個 >> 追加

echo "This is a simple text1" >> temp.txt

當一個命令發生錯誤並退回時,它會返回一個非0的退出狀態

退出狀態可以從特殊變數 $ 中獲得,

在命令執行後立即執行echo,就可以列印退出狀態


要在終端顯示又要重定向資料的副本作為後續的命令的stdin --->都可以用tee 來實現;

command | tee FILE1 FILE2
[hadoop@hadoop scripts]$ cat sh01.sh | tee out.txt

除錯指令碼

預備知識:不需要特殊工具:列印出指令碼接受的引數和輸入

bash -x script.sh

判斷符號[ ]

[hadoop@hadoop scripts]$ [ -z "$HOME" ];echo $?
1
[hadoop@hadoop scripts]$ echo $HOME
/home/hadoop

判斷是否相等

[hadoop@hadoop scripts]$ [ "$HOME" == "$MAIL" ]&& echo true || echo false
false

啟動跟蹤除錯shell指令碼

bash -x script.sh

我們也可以要求只關注指令碼的某些部分的命令及引數的列印輸出

set -x 在執行的時候顯示引數和命令
set +x 禁止除錯
set -v 當命令進行時顯示輸入
set +v 禁止列印輸入

結果

[hadoop@hadoop scripts]$ bash -x sh09.sh 
+ PATH=
+ export PATH
+ network1=192.168.136
sh09.sh: line 7: syntax error near unexpected token `('
sh09.sh: line 7: `for i in (1..10)'
[hadoop@hadoop scripts]$ vi sh09.sh 
[hadoop@hadoop scripts]$ bash -x sh09.sh 
+ PATH=
+ export PATH
+ network1=192.168.136
+ for i in '{1..10}'
+ echo 192.168.136.1
192.168.136.1
+ for i in '{1..10}'
+ echo 192.168.136.2
192.168.136.2
+ for i in '{1..10}'
+ echo 192.168.136.3
192.168.136.3
+ for i in '{1..10}'
+ echo 192.168.136.4
192.168.136.4
+ for i in '{1..10}'
+ echo 192.168.136.5
192.168.136.5
+ for i in '{1..10}'
+ echo 192.168.136.6
192.168.136.6
+ for i in '{1..10}'
+ echo 192.168.136.7
192.168.136.7
+ for i in '{1..10}'
+ echo 192.168.136.8
192.168.136.8
+ for i in '{1..10}'
+ echo 192.168.136.9
192.168.136.9
+ for i in '{1..10}'
+ echo 192.168.136.10
192.168.136.10

函式和引數

定義函式:

function fname(){
statements;
}
或者
fname(){
statements
}
只需要使用函式名就可以呼叫某個函式:
fname;   #執行函式
引數可以傳遞給函式,並由指令碼經行訪問:
fname arg1 arg2;   #傳遞引數
引數訪問方法
fname()
{
 echo $1,$2; #訪問引數1和2
 echo "$@";  #以列表的方式一次性列印所有的引數(常用)
 echo "$*";  #類似於$@但是引數被作為單個實體
 return 0;   #返回值 
}

相關文章