Shell基礎一

來源:互聯網
上載者:User

標籤:

Shell指令:

  shell識別三種基本命令:內建命令、Shell函數以及外部命令:

內建命令就是由shell本身所執行的命令。有些命令是由於其必要性才內建的;例如:cd、read; 另一種內建命令的存在則是為了效率,其中最典型的就是test命令(稍後有介紹),編寫指令碼時會經常用到它。另外還有I/O命令。例如echo  和 printf。

  Shell函數是功能健全的一系列程式碼,以Shell語言寫成,它們可以像命令那樣引用,稍後也有介紹;

  外部命令就是由Shell的副本(新的進程)所執行的命令,基本過程如下:

    a、建立一個新的進程。此進程即為Shell的一個副本。

    b、在新的進程裡,在PATH變數內所列出的目錄中,尋找特定的命令。  /bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin為PATH變數典型的預設值。當命令名稱含有斜杠(/)符時,將掠過路徑尋找步驟;

    c、在新的進程裡,以所找到的新程式取代執行中的Shell程式並執行。

    d、程式完成後,最初的Shell會接著從終端讀取的下一條命令,或執行指令碼裡的下一條命令;

變數:

  在Shell的世界裡,變數值可以是(而且通常是)空值,也就是不含任何字元。這是合理的,也是常見的,好用的特性。空值就是null;

  Shell變數名稱的開頭是一個字母或底線符號,後面可以接著任意長度的字母、數字或底線符號。變數名稱的字元長度並無限制。

  注意:

    量賦值的方式為:先寫變數名稱,緊接著=字元,最後是新值,中間完全沒有任何空格(這點於C/C++很大區別)當要取出shell變數的值時,需於變數名稱前面加上$字元。當所賦值的值內含空格時,請加上引號;

    first=isaac  middle=bashevis  last=singer

    fullname="isaac bashevis singer";    //等號左右兩邊都沒有空格

    oldname=$fullname;            //此處要加上$符

    fullname="$firsh $middle $last";    //將幾個變數串連起來,要加上雙引號

華麗的printf輸出:

  printf命令模仿C程式庫(library)裡的printf()庫程式(library  routine)。它幾乎複製了該函數的所有的功能;

    printf "hello world"

  printf不像echo那樣會自動提供一個換行的符號。你必須顯式地將分行符號指定成\n 。 printf命令的完整文法分為兩部分:

    printf   format-string   [arguments .......]

  $printf   "The first program always prints ‘%s,    %s ! ‘\n "     Hello  world

  The first program always prints  ‘Hello, world !‘

基本的I/O重新導向以及重新導向與管道

  標準輸入/輸出被稱為:標準輸入、標準輸出、以及標準錯誤輸出;

  樣本:等登入shell時,UNIX便將預設的標準輸入、輸出以及錯誤輸出安排成你的終端。I/O重新導向就是通過與終端互動,或是在shell指令碼裡設定

  重新安排從哪裡輸入或輸出到哪裡;

    以  <  改變標準輸入

        program < file   可將program的標準輸入改為file;

    以  >  改變標準輸出

        program  >  file   可將program的標準輸出修改為file;

    >   重新導向符在目標檔案不存在時,會建立一個。然而,如果目標檔案已存在,它就會被覆蓋掉,原本的資料都會丟失;

  以 >> 附加到檔案;

        program  >> file

    如果目標檔案不存在, >>重新導向符便會建立一個。如果目標檔案存在,它不會直接覆蓋掉檔案,而是將程式所產生的資料附加到檔案結尾處;

  以 |  建立管道:

        program1 | program2

  將program1的標準輸出作為program2的標準輸入。雖然< 和 > 可將輸入與輸出串連到檔案,但管道可以使得執行速度比使用臨時檔案的程式塊10倍以上;

特殊檔案:/dev/null 與 /dev/tty

  unix系統提供了兩個對shell編程特別有用的特殊檔案。第一個檔案/dev/null, 就是大家熟知的位桶(bit bucket)。傳送到此檔案的資料都被系統丟掉。也就是說,當程式將資料寫到此檔案時,會認為它已成功完成寫入資料的操作,但實際上什麼事都沒做。如果需要的是命令的退出狀態。而非它的輸出,此功能會很有用。例如,測試一個檔案是否包含某個模式:

  if  grep  pattern  myfile  > /dev/null

  then

    ....    //找到模式

  else

    ....    // 找不到模式時

  fi

  相對地,讀取/dev/null則會立即返迴文件結束符號。讀取/dev/null的操作很少會出現在Shell程式裡,不過瞭解這個檔案的行為模式還是非常重要的;

  另一個特殊檔案為/dev/tty。 當程式開啟此檔案時,unix會自動將他重新導向到一個終端【一個實體控制台或者串口】,也可能是通過網路與視窗登入的偽終端再與程式結合。這在程式必須讀取人工輸入是特別有用;

 

  

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.