1 / 43

Shell 的動作

Shell 的動作. 提供一個提示符號,進入睡眠狀態,直到你輸入按鍵 當命令輸入時,檢查是否有特殊字元(* , ?) ,解釋特殊字元 建立一指令行,傳給 kernel 執行,當指令在執行時, shell 處於等待狀態 工作完成,提示符號重新出現, shell 重回睡眠狀態,開始另一個週期. Shell 解釋週期. 樣式比對-萬用字元. * 代替任何數量字元 ls – x chap* chap chap1 chap2 chap15 chapxyz ? 代替任何單個字元 ls – x chap? chap1 chap2 chap3. 樣式比對-字元類別.

megan
Download Presentation

Shell 的動作

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Shell的動作 • 提供一個提示符號,進入睡眠狀態,直到你輸入按鍵 • 當命令輸入時,檢查是否有特殊字元(*, ?),解釋特殊字元 • 建立一指令行,傳給kernel執行,當指令在執行時,shell處於等待狀態 • 工作完成,提示符號重新出現,shell重回睡眠狀態,開始另一個週期

  2. Shell解釋週期

  3. 樣式比對-萬用字元 • * 代替任何數量字元 • ls –x chap* chap chap1 chap2 chap15 chapxyz • ? 代替任何單個字元 • ls –x chap? chap1 chap2 chap3

  4. 樣式比對-字元類別 • [] 代替括號中其中的一個字元 • ls –x chap[13] chap1 chap3 • - 指定字元範圍(必須左邊的字比右邊有較小的ASCII數值) • ls –x chap[1-3] chap1 chap2 chap3

  5. 樣式比對-反向字元類別 • ! 置於字元類別開頭,會將比對規則反向 • ls –x *.[!Z] 顯示有副檔名且不為.Z的檔案

  6. 樣式比對-萬用字元

  7. 當wildcards不具特殊意義 • * ?用於字元類別中 • !-置於字元類別外 • !不在字元類別的開頭 • - 字元類別左右字元適當 • * 不會比對以點開頭的檔案或路徑名稱中 的/號

  8. Quoting Special Characters • If you want the shell to treat special characters as their own meaning, not as a special character, you must quote. • backslash \ • single quotes ‘ ‘ • back quotes ` ` • double quotes “ “

  9. Quoting Special Characters % echo what time is it ? • Without the backslash, ? is treated as a wildcard % echo what time is it \? • The backslash does not appear in the output; it only purpose is to cancel the special meaning of the question mark • The backslash only works on a single character.

  10. Quoting Special Characters • To produce the output *** STARTS *** • echo \*\*\* STARTS \* \* \* • echo ‘*** STARTS ***’

  11. Quoting Special Characters `.........` • backquotes are use to enclose commands that you want the shell to run. • % echo It is now `date`. • % echo It is now date.

  12. Quoting Special Characters • Double quotes (“.....”)are like single quotes but less powerful. • Putting double quotes around a string of characters cancels the special meaning of any of the characters except the dollar sing($), back quotes(`...`), or backslash (\)

  13. Quoting Special Characters

  14. echo的escape及quoting • /usr/bin/echo • \cescape sequence讓游標不換行立即出現 • echo ‘Enter your Name: \c’ • \t  定位鍵 • f 跳過一頁 • \n 換新行 • \07 嗶一聲 • echo ‘A\nB\n\07\tC’

  15. echo • 重覆參數 • 察看shell的參數設定echo $PATH • 檔案名稱 *  ?[ • 忽略參數間多餘的空白

  16. sun4330% echo A B C A B C • sun4330% echo 'A B C' A B C • sun4330% /usr/5bin/echo 'A\nB\n\tC' A B C

  17. 轉向 Redirection • 指令不只能由鍵盤讀取以及由終端機顯示資料 • 指令可以利用字元串流(character stream)而不需知道輸入來源和輸出目的地 • 字元串流(character stream)是序列字元,對許多指令來說就像是輸入來源和輸出標的 • UNIX將這樣的串流視為檔案

  18. Shell的標準串流檔案 • 在使用者一登入時將他們附著於使用者的終端輸入輸出設備,任何使用到這些串流的指令都可藉止來正常運作,登出時shell便將這些串流關掉 • 標準輸入 • 預設為鍵盤輸入 • 標準輸出 • 預設為終端機輸出 • 標準錯誤輸出 • 預設為終端機輸出 • 它們是可以被轉向到任何硬碟檔案或其他設備

  19. 標準輸出 • 類似who指令會將輸出轉成一字元串流,這串流稱為標準輸出,預設為顯示在終端機上 • 利用符號>和>>您可以將輸出轉向至一個磁碟檔 • 當一指令的輸出轉向至一檔案時,輸出檔案會先被shell建立,然後指令才被執行

  20. 輸出重導 • 當Shell看到 > 時將標準輸出傳送到檔案 • > • 將前端的命令輸出重導到後面的檔案上 • cal 4 2002 > spring • ls >lslist

  21. 附加型(append)輸出重導 • 將結果附加在原檔案內容的後面 • >> • cal 5 2002 >> spring

  22. 標準輸出的三種標的

  23. 標準輸入 Standard Input • 許多指令的輸入也是由串流讀取而來,這串流叫做指令的標準輸入

  24. 標準輸入的三種來源 • wc …… [ctrl-d] • wc指令不接檔案名稱,會預期由鍵盤輸入 wc 2 ^ 32 5 + 10 [ctrl+d] 2 6 14

  25. 標準輸入 • 標準輸入也可以轉向成由檔案內容而來 • 利用<來作輸入的轉向,shell會將wc所需的輸入由檔案提供 • wc < calc.lst (wc並沒有開啟檔案calc.lst) 3 9 30 • wc calc.lst (wc開啟檔案calc.lst) 3 9 39 calc.lst

  26. 輸入重導 • shell從普通檔案讀取輸入資料 • < • mail melanie@mis.yuntech.edu.tw < spring

  27. 標準輸入的三種來源 • 當標準輸入由檔案轉向而來時(利用<),是由shell來開啟檔案。在這指令完全不管shell的動作。然而,當檔案名稱直接提供給指令當參數時,指令會去開啟檔案,而非shell。

  28. 利用批次模式 • 同時用到stdin stdout bc < calc.lst >result.lst

  29. 同時由檔案和標準輸入來提供輸入 • 當一指令由多個來源讀取輸入時,比方一檔案以及標準輸入,符號 – 用來明確指定輸入的順序 • cat – foo先stdin再檔案foo • cat foo – bar先檔案foo ,stdin再檔案bar

  30. 標準錯誤輸出 • 標準串流的代碼(檔案描述器) • 0 標準輸入 • 1 標準輸出 • 2 標準錯誤 • C shell將標準錯誤標準輸出合併在一起

  31. 合併串流 • <,>和>>對介於它們之間的空白字元不加理會,shell會替指令處理串流的來源和標的。 wc < infile >newfile wc > newfile <infile >newfile< inflie wc

  32. 合併串流 • stdout 及stderr同一指令行 cat newfile nofile 2> errorfile > outfile

  33. 重導標準錯誤(C shell) • >&;將錯誤訊息重導到檔案中 command >&errfile • To redirect standard output and standart error to different files (command > outputfile)>&errfile • To redirect standard output and standart error to the same file command >& outfile

  34. /dev/null 將檔案清為空白 cal 2003 >/dev/null cat /dev/null 或避免錯誤訊息顯示 cat chap100 2>/dev/null /dev/stty 輸出顯示到目前的終端機 who > /dev/tty /dev/null &/dev/stty

  35. 三種標準檔案

  36. 管線pipe • 管線是將某個程式的標準輸出連接到另一程式的標準輸入 • I/O重導和管線可以用在同一個命令中 • Command1 | command2 | command3 • cal 2003;cal2004|more • ls |wc –l >fcount • man grep | col –b > grep.txt • man grep | col –b | lp • 在管線處理中,管線符號左邊的指令必須支援標準輸出,而右邊的指令必須支援標準輸入

  37. Wc [-lcw] filelist -l  行數 -w 字數 -c 字完數 I/O重導 ls /faculty/melanie > tmpcount wc –l tmpcount rm tmpcount pipe ls /faculty/melanie|wc –l 用wc來數列表中有多少檔案

  38. tee • 讀取standin,並結果將送到standout及其他檔案 • 擷取command1之輸出,將輸出導出傳送到檔案outfile與command2 command1 | tee outfile |command2 • who | tee user.lst • who | tee user.lst| wc –l • who | tee /dev/tty |wc -l • spell chapt | tee errwords

  39. grep尋求特定字串 • 由標準輸入依照樣本字元逐行搜尋 • 只要包含所要的樣本字元都會印在標準輸出上 • Grep [-cilnv] pattern [filelist] • 找出以l開始的行列 ls -l /usr/local/bin | grep \^l • 找出process中含有melanie的process ps aux | grep melanie

  40. To search several C-language source files for the pattern strcpy, • grep 'strcpy' *.c • 包含樣本字元的行號 • grep –n ‘strcpy’ *.c • 列出包含樣本字元的檔案名稱 • grep –l ‘strcpy’ *.c • 列出不包含樣本字元的所有列 • grep –v ‘strcpy’ out3.c

  41. Shell 變數 • 設定變數值 • variable=value (兩邊不可有空白) • 取消設定 • unset variable • 查詢變數值 • echo $variable

  42. C Shell 變數 • 設定變數值 • set variable=value (兩邊不可有空白或有空白) • set x=10 • set mydir=`pwd` • 查詢變數值 • echo $variable

  43. shell script • 將多個指令儲存在一個檔案中然後執行整個檔案 • 以直譯interpretive的模式執行 • 執行 • 方法一 sh script.sh • 方法二 chmod u+x script.sh script.sh

More Related