SHELL異常處理

來源:互聯網
上載者:User

標籤:des   style   blog   io   color   使用   sp   strong   檔案   

  寫SHELL好久了,經常被異常困擾,可竟然堅持了若干年沒用過,回想以前服務過的公司,阿彌陀佛,罪過罪過。廢話少說,希望此篇文章可以協助大家和我徹底結束SHELL指令碼就是LINUX命令集合的初級階段。

一、STDOUT、STDERR

  如果要擷取SHELL指令碼的異常輸出,就需要首先理解SHELL命令的標準輸出STDOUT、標準錯誤STDERR。

  當我們在編寫 shell 指令碼時,我們會非常頻繁地操作執行命令的標準輸入stdin、標準輸出stdout、標準錯誤stderr。當我們執行指令檔或者執行一個 shell 命令的時候,單從終端輸出我們很難區分哪些是標準輸出,哪些是標準錯誤。所以我們把這些資訊重新導向特定的地方,以便於我們分析指令檔及 shell 命令的執行情況,這就用到了檔案描述符。檔案描述符是與開啟檔案或者資料流相關聯的整數,0、1、2 是系統保留的三個檔案描述符,分別對應標準輸入、標準輸出、標準錯誤。Linux Shell 使用 " > " ">>" 進行對檔案描述符進行重定位。例如代碼:

#!/bin/bashls liqiu > /tmp/error #很明顯這是一個錯誤的命令echo $? #捕獲上一條命令的輸出 (if 0 正常 else 錯誤)ls -l > /tmp/logecho $?

輸出結果:

@~ $ ~/study/test.sh ls: liqiu: No such file or directory10

  1 說明`ls liqiu > /tmp/error`執行錯誤,0 說明ls -l > /tmp/log執行成功。那麼希望的記過是/tmp/error報錯錯誤記錄檔,/tmp/log儲存正確的結果,可查看檔案發現不是這麼回事。

@~ $ more /tmp/log total 0drwx------   3 liqiu  staff   102  4 26  2014 Applicationsdrwx------+  4 liqiu  staff   136 11  2 17:06 Desktopdrwxr-xr-x   4 liqiu  staff   136 10 18 09:56 svn@~ $ more /tmp/error @~ $ 

  原因在於:重定位元運算符 ">" 的預設參數為標準輸出 stdout ,即 1 ; 所以 ">" 等價於 "1>"; 上面的代碼等價於: 

#!/bin/bashls liqiu 1> /tmp/errorecho $? #捕獲上一條命令的輸出 (if 0 正常 else 錯誤)ls -l 1> /tmp/logecho $?
二、捕獲異常

  所以要捕獲異常,需要修改代碼:

#!/bin/bashls liqiu > /tmp/error 2>&1 #使用 " 2>&1" 把標準錯誤 stderr 重新導向到標準輸出 stdout ;echo $? #捕獲上一條命令的輸出 (if 0 正常 else 錯誤)ls -l > /tmp/logecho $?

  執行之後,發現錯誤資訊出現在了檔案/tmp/log中。

@~ $ cat /tmp/error ls: liqiu: No such file or directory@~ $

 

 

 

SHELL異常處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.