10. 標準輸入與輸出:
在此先介紹三個概念,之後介紹資料流重導向:
(1) 標準輸入(standard input , stdin):指的是將資料輸出給檔案或程式。最常見的例子,是利用read命令要求使用者輸入資訊。
(2) 標準輸出(standard output , stdout):當執行一個執行檔,若成功執行,會在螢幕上輸出的成功執行後的訊息。這就叫標準輸出。
(3) 標準錯誤輸出(standard error output , stderr):當執行一個執行檔,若執行失敗,會在螢幕上輸出的執行失敗後的訊息。這就叫標準錯誤輸出。
(4) 資料流重導向(data stream redirection):所謂資料流重導向,對於輸出而言,是將原本該顯示在螢幕上的輸出訊息,給存放到檔案裡。對於輸入而言,是將輸入之訊息的來源,由「使用者親手從鍵盤輸入」改為「從檔案輸入」。
(4-1) 標準輸出的重導向:
利用:命令式 1> 檔案 ,若命令式在執行後回傳成功執行的訊息,則將此訊息存在檔案內,複寫該檔案。
利用:命令式 1>> 檔案 ,若命令式在執行後回傳成功執行的訊息,則將此訊息存在檔案內,添加在該檔案的末尾。
(4-2) 標準輸出的重導向:
利用:命令式 2> 檔案 ,若命令式在執行後回傳執行失敗的訊息,則將此訊息存在檔案內,複寫該檔案。
利用:命令式 2>> 檔案 ,若命令式在執行後回傳執行失敗的訊息,則將此訊息存在檔案內,添加在該檔案的末尾。
※ (4-1)的方法,只會在命令式成功執行時才有效,而(4-2)的方法,只會在命令式執行失敗才有效。而往往我們在執行命令時,並無法事先預料其執行成功或失敗,故(4-1)和(4-2)的方法必須和著一起用。
如:命令式 1>> 檔案一 2> 檔案二,若命令式在執行後回傳成功執行的訊息,則將此訊息存在檔案一內,添加在檔案一的末尾。若命令式在執行後回傳執行失敗的訊息,則將此訊息存在檔案二內,複寫該檔案二。
如果想把執行成功和失敗的訊息都放在同一個檔案內,也可以用:命令式 &> 檔案。不過這種寫法只是能訊息覆寫在檔案裡,不能用添寫的方式。
(4-3) 標準輸入的重導向:
利用:命令式 < 檔案,可以將檔案的內容,作為執行命令式時所需的輸入。譬如,今有一個shell script檔,其名為tt.sh,其內容是:
read -p "who are you?" who
read -p "how old are you?" age
echo "you are "$who" , "$age" years ago."
原本在執行tt.sh的時候,要手動輸入變數who和age,利用輸入重導向的方法,可以讓tt.sh使用檔案中的資料作為輸入。即是寫另一檔,其名為person1,其內容是:
weiwei
18
在命令列輸入:sh tt.sh < person1
不用手動輸入變數,即顯示:you are weiwei , 18 years ago.
※ 在person1檔案中,一行資料就相當一個變數值。
※ 尚有命令式 << 關鍵字,可連續輸入變數值,直到輸入關鍵字之後,才停止輸入。
※ 註:上述的命令式,實際上可以是任何執行檔名。不限於命令執行檔。
留言列表